【问题标题】:What's the order of execution of commands in bash?bash中命令的执行顺序是什么?
【发布时间】:2020-04-04 11:10:11
【问题描述】:

我做了一个小命令,应该是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。

【问题讨论】:

    标签: bash windows-subsystem-for-linux


    【解决方案1】:

    什么问题,我该如何解决?

    如果cd 失败,它将执行下一个命令,即mkdircd,但由于脚本/命令退出后的子shell,您将位于启动脚本/命令的同一目录中。

    你可以使用循环。

    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

    【讨论】:

      猜你喜欢
      • 2016-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-01
      • 1970-01-01
      • 2017-06-12
      • 1970-01-01
      • 2016-08-20
      相关资源
      最近更新 更多