关于linux:为什么“/bin/sh cd /root/eos/” 不工作,“/bin/sh -c ls && cd /root/eos/” 却能很好的运行

why does not “/bin/sh cd /root/eos/” work ,but “/bin/sh -c ls && cd /root/eos/” works well in centos

本问题已经有最佳答案,请猛点这里访问。

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

为什么/bin/sh cd/root/eos/"不起作用,但是/bin/sh-c ls&;cd/root/eos/"在CentOS中效果很好谢谢。

1
2
3
4
5
6
7
8
9
[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版(核心)[根@izbp16eo65uiwii1Mfm63tz eos]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/是两个命令的组合。

先执行/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。