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