【问题标题】:why does not "/bin/sh cd /root/eos/" work ,but "/bin/sh -c ls && cd /root/eos/" works well in centos [duplicate]为什么“/bin/sh cd /root/eos/”不起作用,但“/bin/sh -c ls && cd /root/eos/”在centos中运行良好[重复]
【发布时间】:2019-04-29 05:23:38
【问题描述】:

我在脚本中使用 cd 命令时遇到了一个问题。 这是下面的测试,有谁能帮忙告诉下原因吗?

为什么 "/bin/sh cd /root/eos/" 不起作用,但 "/bin/sh -c ls && cd /root/eos/" 在 centos 中运行良好 谢谢。

[root@izbp16eo65uiwii1mfm63tz eos]# pwd
/root/testeosnode/CryptoKylin-Testnet/docker/eos
[root@izbp16eo65uiwii1mfm63tz eos]# /bin/sh  cd /root/eos/
[root@izbp16eo65uiwii1mfm63tz eos]# pwd
/root/testeosnode/CryptoKylin-Testnet/docker/eos
[root@izbp16eo65uiwii1mfm63tz eos]# /bin/sh -c ls &&  cd /root/eos/
build.log  build.sh  Dockerfile  eos
[root@izbp16eo65uiwii1mfm63tz eos]# pwd
/root/eos

环境 CentOS Linux 版本 7.5.1804(核心) [root@izbp16eo65uiwii1mfm63tz eos]# ls -l /bin/sh lrwxrwxrwx 1 root root 4 10oct 9 18:00 /bin/sh -> bash

【问题讨论】:

  • /bin/sh cd /root/eos/ 会给你/bin/sh: 0: Can't open cd
  • 这都是关于“作品”的定义。 "Works" != "shows the expected output" – 在后一种情况下,问题可能出在预期上。

标签: linux bash


【解决方案1】:

/bin/sh cd /root/eos/ 不起作用,因为这不是让 /bin/sh 执行命令的正确方法。

/bin/sh -c ls 有效,因为-c 参数将使/bin/sh 执行下一个参数,即ls

/bin/sh -c "cd /root/eos/" 会“工作”。它将运行 /bin/sh ,该进程会将其目录更改为 /root/eos 然后该进程将退出,而您正在运行的 shell 的工作目录不受影响。

/bin/sh -c ls && cd /root/eos/ 是 2 个命令的组合。

首先执行/bin/sh -c ls。如果成功,则执行cd /root/eos。注意/bin/sh 命令只运行ls。它不会运行 cd /root/eos - 该部分由您当前的 shell 运行,并且会更改您的工作目录。

注意,这也不同于做:

/bin/sh -c "ls && cd /root/eos"

在这种情况下,/bin/sh 将运行整个ls && cd /root/eos 命令——尽管cd 命令只影响以/bin/sh 命令启动的进程,它不会影响你正在运行它的shell。

【讨论】:

    猜你喜欢
    • 2011-01-30
    • 1970-01-01
    • 2011-04-28
    • 2021-10-19
    • 1970-01-01
    • 2021-10-17
    • 2015-12-23
    • 1970-01-01
    • 2016-08-08
    相关资源
    最近更新 更多