【问题标题】:why the current working path is the initial path in shell "$()"为什么当前工作路径是 shell "$()" 中的初始路径
【发布时间】:2021-12-29 10:30:55
【问题描述】:

当我执行以下命令时:

[root@localhost install_zone]# su nylws -c "cd ~/gamesvr/conf;echo $(pwd);pwd"

输出:

/opt/deploy_scripts/install_zone

/data/nylws/gamesvr/conf

那么为什么这两条路径不同呢?谢谢!

【问题讨论】:

    标签: linux shell


    【解决方案1】:

    这是因为 $(...) 是在父 shell 的双引号内计算的,在 su 调用的 shell 甚至启动之前。所以子shell看到:

    cd ~/gamesvr/conf;echo /opt/deploy_scripts/install_zone;pwd
    

    解决此问题的最佳方法是使用单引号,这会将字符串按字面意思传递给子shell,而不对其进行任何扩展:

    su nylws -c 'cd ~/gamesvr/conf;echo $(pwd);pwd'
    

    【讨论】:

      猜你喜欢
      • 2022-11-02
      • 1970-01-01
      • 1970-01-01
      • 2020-11-24
      • 1970-01-01
      • 1970-01-01
      • 2018-08-31
      • 1970-01-01
      • 2020-11-16
      相关资源
      最近更新 更多