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 失败,它将执行下一个命令,即 mkdircd 但由于 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