当我使用以下命令时,一切都按预期工作(一个新的gnome-terminal打开,当前的工作目录被更改,终端保持打开状态):
gnome-terminal -e "bash -c 'cd /';$SHELL"
# ↑
# no space character hereRun Code Online (Sandbox Code Playgroud)
但是当我使用时:
gnome-terminal -e "bash -c 'cd /'; $SHELL"
# ↑
# note the spaceRun Code Online (Sandbox Code Playgroud)
我可以看到一个打开的终端,但我无法看到当前工作目录是否被更改,因为它立即关闭了终端.
我的问题是:为什么会这样; 如果我在第二种情况下放置空格怎么可能出错?
在第一种情况下,gnome-terminal执行
bash -c "cd /;/bin/bash"
Run Code Online (Sandbox Code Playgroud)
在第二种情况下,它运行
bash -c "cd /;" /bin/bash
Run Code Online (Sandbox Code Playgroud)
第一种情况意味着"评估cd /;/bin/bash",它将cd并运行一个交互式shell.
第二种情况意味着" cd /;使用$0set进行评估/bin/bash",将运行cd然后退出.