我在 Ubuntu 上安装了 Terminator,并保存了自己的布局,其中包含 5 个终端窗口。现在我想在每个窗口中执行一个 shell 脚本。问题是,当脚本终止时,终端窗口变得毫无用处,因为没有命令提示符了。例如,我可以保存我的布局并在布局配置中输入命令“top”。下次启动 Terminator“terminator -m -l mylayout &”时,它将打开我的布局,在相应的子终端中执行命令“top”,但如果我按“q”退出“top”,该终端将不再有命令提示符。有办法修复它吗?还有,有没有办法从单独的 gnome-terminal 窗口将命令传递到 Terminator 布局内的终端窗口?
答案1
我还想通过执行脚本然后启动 bash shell 来启动 Terminator 会话。我这样做了:
在 Terminator 的偏好设置中,在‘布局’选项卡上,在左侧选择所需的布局,然后在右侧选择所需的终端。
在“自定义命令”字段中,输入命令,然后输入&& bash || bash
。无论命令/脚本是否成功,这都会启动一个新的 bash shell。
afterbash
将&&
在成功退出代码 (0) 后执行。afterbash
将||
在错误退出代码 (1-255) 后执行。
示例:要执行top
然后退出到新的 bash shell,请在“自定义命令”字段中输入此命令。
top && bash || bash
另一个例子:假设你需要一些鼓励来让新的一天有一个好的开始。
echo -e "\nWelcome! You are going to have a productive day!\n" && bash || bash
然后,要运行指定的命令,请使用-l
选项和布局名称启动终止符。
terminator -l mylayout
答案2
您可以使用自定义配置文件来让终端在命令退出后保持打开状态。请参阅首选项中的配置文件、命令选项卡。您可以让它们保持打开状态直到您明确关闭它们,也可以让它们重新启动命令(bash 或自定义命令)。
我最近学到的另一个技巧是使用以下内容作为自定义命令:
bash --rcfile <(echo ". ~/.bashrc && ls -l")
它启动 bash,执行命令 (ls),然后进入同一个 bash 进程。这比在命令末尾添加 bash 的做法略胜一筹。
答案3
我知道这是一个老问题,但我今天花了一些时间试图弄清楚,但这些都对我不起作用。我偶然发现了这篇博文这正是我所需要的。所以我想我应该分享一下。
基本上,你将这段代码添加到你的.zshrc
或.bashrc
:
echo $INIT_CMD
if [ ! -z "$INIT_CMD" ]; then
OLD_IFS=$IFS
setopt shwordsplit
IFS=';'
for cmd in $INIT_CMD; do
print -s "$cmd" # add to history
eval $cmd
done
unset INIT_CMD
IFS=$OLD_IFS
fi
然后将其设置为您的自定义命令:
env INIT_CMD="cd bla; export PYTHONPATH=/tmp; workon project" zsh
Ctrl这样您就可以将多个命令串在一起,然后当您用+结束持久命令时,C终端保持打开状态。