Xterm cd 命令在启动选项中不起作用

Xterm cd 命令在启动选项中不起作用

当我使用以下命令启动 xterm 时: xterm -e 'cd ~' -hold
会弹出一个新的 xterm 窗口,显示:xterm: Can't execvp cd ~: No such file or directory
之后 xterm 窗口仍位于我的当前目录中,我可以在其中cd ~手动运行,其行为符合预期。有什么想法可能会导致这种情况吗?或者是否有另一种方法可以更改 xterm 的起始目录。

我正在运行 Ubuntu 20.04.4 LTS

答案1

( cd && xterm )

为命令设置正确的工作目录的最常见方法是在cd调用命令之前进行设置。在子 shell 中执行此操作可确保调用 shell 的工作目录不会更改。

此答案顶部的命令启动一个子 shell,然后用于cd将工作目录更改为当前用户的主目录。如果成功,xterm则调用。当xterm不带 调用时-e,默认情况下会启动交互式 shell。

xterm终止时(如果失败则立即) ,控制权将返回给调用 shell cdxterm只要正在运行的命令终止,即交互式 shell 完成时,终端就会终止。&在末尾使用可xterm在后台启动子 shell。

答案2

查看man xterm该选项的记录位置-e(强调我的):

-e 程序 [ 参数 ... ]

该选项指定要在 xterm 窗口中运行的程序(及其命令行参数)。如果命令行上未给出 -T 和 -n,它还会将窗口标题和图标名称设置为正在执行的程序的基本名称。

注意:这必须是命令行上的最后一个选项。

如您所见,-e 必须是命令行上传递的最后一个选项。所以xterm -hold -e 'cd ~'会起作用,它只是无用的,因为终端将运行cd然后立即退出 shell 会话,因为这意味着-e:运行命令并退出。

所以你需要两者cd 启动一个新的外壳。所以试试这个:

xterm -hold -e 'cd ~; bash' 

斯蒂芬·查泽拉斯我在此处复制的评论中提出了一个非常好的观点:

请注意,使用 时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'

相关内容