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