Larsinator9000 Asked: 2022-09-29 00:52:19 +0800 CST2022-09-29 00:52:19 +0800 CST 2022-09-29 00:52:19 +0800 CST Xterm cd 命令在启动选项中不起作用 772 当我使用以下命令启动 xterm 时: 会xterm -e 'cd ~' -hold 弹出一个新的 xterm 窗口说:xterm: Can't execvp cd ~: No such file or directory 之后 xterm 窗口仍然在我的当前目录中,我可以在其中cd ~手动运行,它的行为符合预期。有什么想法可能导致这种情况吗?或者如果有另一种方法可以更改 xterm 的起始目录。 我正在运行 Ubuntu 20.04.4 LTS bash xterm 2 个回答 Voted Kusalananda 2022-09-29T01:10:49+08:002022-09-29T01:10:49+08:00 ( cd && xterm ) 为命令设置正确工作目录的最常见方法是cd在调用命令之前。在子 shell 中这样做可确保调用 shell 的工作目录不会更改。 此答案顶部的命令启动一个子shell,然后用于cd将工作目录更改为当前用户的主目录。如果成功,xterm则调用。当在没有 的情况下xterm调用-e时,默认情况下,它会启动一个交互式 shell。 xterm终止时(或cd失败时立即)将控制权交还给调用 shell 。终端在其xterm运行的命令终止时终止,即当交互式 shell 完成时。最后使用在后台&启动子shell 。xterm Best Answer terdon 2022-09-29T01:21:55+08:002022-09-29T01:21:55+08:00 查看man xterm该-e选项的记录位置(强调我的): -e 程序 [ 参数 ... ] 此选项指定要在 xterm 窗口中运行的程序(及其命令行参数)。如果在命令行上既没有给出 -T 也没有给出 -n,它还将窗口标题和图标名称设置为正在执行的程序的基本名称。 注意:这必须是命令行上的最后一个选项。 如您所见,-e 必须是命令行上传递的最后一个选项。所以xterm -hold -e 'cd ~'会起作用,它只是没用,因为终端将运行cd然后立即退出 shell 会话,因为这-e意味着:运行命令并退出。 所以你需要两者cd 并启动一个新的shell。所以试试这个: xterm -hold -e 'cd ~; bash' Stéphane Chazelas在我在这里复制的评论中提出了一个非常好的观点: 请注意,对于xterm -hold -e 'cd ~; bash',xterm 仍会尝试运行名为cd ~; bash. 它可能会失败,但在这种情况下,因为我们处于模棱两可的情况下,只有一个参数在 之后传递-e,它会退回到$SHELL使用-c和cd ~; bash作为参数执行。在这里,为了消除这种歧义,您应该这样做xterm -hold -e sh -c 'cd && exec bash'。另请参阅xterm -hold -e env -C ~ bash一些env实现。 所以,更好地使用: xterm -hold -e sh -c 'cd && exec bash'
为命令设置正确工作目录的最常见方法是
cd
在调用命令之前。在子 shell 中这样做可确保调用 shell 的工作目录不会更改。此答案顶部的命令启动一个子shell,然后用于
cd
将工作目录更改为当前用户的主目录。如果成功,xterm
则调用。当在没有 的情况下xterm
调用-e
时,默认情况下,它会启动一个交互式 shell。xterm
终止时(或cd
失败时立即)将控制权交还给调用 shell 。终端在其xterm
运行的命令终止时终止,即当交互式 shell 完成时。最后使用在后台&
启动子shell 。xterm
查看
man xterm
该-e
选项的记录位置(强调我的):如您所见,
-e
必须是命令行上传递的最后一个选项。所以xterm -hold -e 'cd ~'
会起作用,它只是没用,因为终端将运行cd
然后立即退出 shell 会话,因为这-e
意味着:运行命令并退出。所以你需要两者
cd
并启动一个新的shell。所以试试这个:Stéphane Chazelas在我在这里复制的评论中提出了一个非常好的观点:
所以,更好地使用: