bash中命令的执行顺序是什么?
What's the order of execution of commands in bash?
我做了一个小命令,应该 cd
我到当前日期名称的子目录,如果这个目录不存在,首先创建一个:
cd $(date +%F) || (mkdir $(date +%F); cd $(date +%F);)
它可以与预先存在的目录一起正常工作,但是当目录不存在时它会创建目录但不会 cd
:
luk45s5@DESKTOP:~/test$ ls
luk45s5@DESKTOP:~/test$ cd $(date +%F) || (mkdir $(date +%F); cd $(date +%F);)
-bash: cd: 2020-04-04: No such file or directory
luk45s5@DESKTOP:~/test$ ls
2020-04-04
这是什么问题,我该如何解决?如果有帮助的话,我正在使用 Ubuntu WSL。
What's the problem, how do I fix it?
如果 cd
失败,它将执行下一个命令,即 mkdir
和 cd
但由于 script/commands 退出后的子 shell,您将处于相同的状态您启动 script/commands.
的目录
您可以使用循环。
until cd "$(date +%F)" 2>/dev/null; do
mkdir -p "$(date +%F)"
done
在您的示例中,您可以使用 { }
命令分组
cd $(date +%F) 2>/dev/null || { mkdir $(date +%F) && cd $(date +%F) ; }
2>/dev/null
将错误消息重定向到 /dev/null
我做了一个小命令,应该 cd
我到当前日期名称的子目录,如果这个目录不存在,首先创建一个:
cd $(date +%F) || (mkdir $(date +%F); cd $(date +%F);)
它可以与预先存在的目录一起正常工作,但是当目录不存在时它会创建目录但不会 cd
:
luk45s5@DESKTOP:~/test$ ls
luk45s5@DESKTOP:~/test$ cd $(date +%F) || (mkdir $(date +%F); cd $(date +%F);)
-bash: cd: 2020-04-04: No such file or directory
luk45s5@DESKTOP:~/test$ ls
2020-04-04
这是什么问题,我该如何解决?如果有帮助的话,我正在使用 Ubuntu WSL。
What's the problem, how do I fix it?
如果 cd
失败,它将执行下一个命令,即 mkdir
和 cd
但由于 script/commands 退出后的子 shell,您将处于相同的状态您启动 script/commands.
您可以使用循环。
until cd "$(date +%F)" 2>/dev/null; do
mkdir -p "$(date +%F)"
done
在您的示例中,您可以使用 { }
cd $(date +%F) 2>/dev/null || { mkdir $(date +%F) && cd $(date +%F) ; }
2>/dev/null
将错误消息重定向到/dev/null