为什么“ / bin / sh cd / root / eos /”不起作用,但是“ / bin / sh -c ls && cd / root / eos /”在centos中效果很好

时间:2018-11-27 12:53:30

标签: linux bash

在脚本中使用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

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

1 个答案:

答案 0 :(得分:3)

/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命令开始的进程,而不会影响您正在其中运行的外壳程序。

相关问题