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



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

为什么"/bin/sh-cd/root/eos/"不起作用,但"/bin/sh-cls&-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

envCentOS Linux 7.5.1804版(核心([root@izbp16eo65uiwii1mfm63tzeos]#ls-l/bin/shlrwxrwxrwx 1根4 10月9日18:00/bin/sh->bash

/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/是两个命令的组合。

执行第一个CCD_ 10。如果成功,则执行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。

最新更新