用于更改终端目录并打开第二个终端的 Shell 脚本

用于更改终端目录并打开第二个终端的 Shell 脚本

我是编写 shell 脚本的新手,我正在尝试将脚本写入 CD 到为我的一个类保存程序的文件夹,然后打开第二个终端,通过 ssh 连接到用于测试我编写的程序的服务器。问题是我找不到方法将终端 shell 的目录更改为存储程序的位置。

#!/bin/bash/
gnome-terminal -e "ssh [email protected]";
cd /path/to/dir

问题是脚本终止后工作目录不会更改(它保持调用脚本时的状态)。我尝试用“.”来调用它。在脚本名称前面,使其在当前进程中运行,但第二个终端从未打开。

我尝试做与上面相同的事情,除了将第三行替换为

gnome-terminal -e "cd /path/to/dir/";

这样两个终端就会打开,但 CD 到路径的终端会出现错误,类似于“为此终端创建子进程时出错:无法执行子进程'cd'”

谁能帮我弄清楚如何解决这个问题?

答案1

您的第一个版本首先打开一个gnome-terminal,等到您关闭它,然后更改到新目录。

您的第二个版本尝试运行命令cd而不是 shell,但这cd不是真正的命令,而是 shell 内置命令。 (看看type -a cd这一点。)

问题是如何gnome-terminal决定显示哪个目录。除非被该选项覆盖,否则它通常会使用当前工作目录--working-directory

因此您可以使用:

cd /path/to/dir && gnome-terminal

或者

gnome-terminal --working-directory=/path/to/dir

查看man gnome-terminal可用选项。

对于 ssh 部分,您必须决定是否要在本地或远程端运行 gnome 终端。要在远程站点上运行它,您可以使用:

ssh -X [email protected] gnome-terminal --working-directory=/path/to/dir

对于本地方面,您可以使用类似以下内容:

gnome-terminal -e "ssh -t [email protected] bash -c 'cd /path/to/dir && bash -l'";

答案2

如果运行脚本时在脚本名称前加一个点(空格),工作目录将保持更改。

例如,我使用一个名为 pj 的项目,它将我移动到我的 python 项目目录中。它包含这两行:

#!/bin/bash
cd /home/pi/python

我使其可执行,然后将其复制到 /usr/sbin ,它位于我的 $PATH 上。

要运行它,我输入:

. pj         (note the dot and the space)

瞧,它变成了那个目录,把我留在那里。
再简单不过了。

相关内容