![在 bash 终端窗口中执行多个命令](https://linux22.com/image/1503549/%E5%9C%A8%20bash%20%E7%BB%88%E7%AB%AF%E7%AA%97%E5%8F%A3%E4%B8%AD%E6%89%A7%E8%A1%8C%E5%A4%9A%E4%B8%AA%E5%91%BD%E4%BB%A4.png)
我想要从 bash 脚本打开一个LXTerminal
窗口并执行几个命令,例如:
lxterminal -e "echo 'Hello' && sleep 5"
它甚至不读取第一个命令(因为我尝试反转顺序),并且无法使用简单的链command1 ; command2
。显然,它可以使用单个命令。
有什么想法吗?提前谢谢您。
答案1
这是一个记录错误使用 lxterminal。您有其他可用的终端程序吗?xterm、gnome-terminal 等?lxterm(不同于 lxterminal)完全支持您要执行的操作,该操作已在该错误报告中讨论。我无法从我的环境中轻松访问该软件包,因此没有查看它。
一个功能齐全的解决方法是生成一个包含命令序列的 shell 脚本,并将传递给 lxterminal 的命令简单地作为该脚本。
例如,在脚本中进行此 lxterminal 调用的部分中,执行以下操作:
tmpScript=$(mktemp -u) || { echo "tmp file generation error!"; exit 1; }
echo '#!/bin/bash' > $tmpScript
echo "echo 'Hello' && sleep 5" >> $tmpScript
chmod +x $tmpScript
lxterminal -e "$tmpScript"
至少在我的环境中,这是可行的(fed 24;x86_64;lxterminal 版本 0.2.0,内核 4.6.5)。
除非 lxterminal 是你唯一的选择,否则它不是完成这项工作的合适工具。考虑到这个 bug 的年限,它可能永远都不会是合适的。xterm 通常是这类事情最受欢迎的选择,因为它具有可移植性和易用性,尽管我偏爱 konsole。
答案2
您可以使用任何其他可以运行此功能的终端。例如,在xterm
以下终端中运行:
xterm -e "echo 'Hello' && sleep 5"
作为xterm
X 的默认终端仿真器,这也应该是您的解决方案。
答案3
解决方案是使用 --command 修饰符来实现,如下所示; lxterminal --command cd ~/some/catalog && echo 'Hello'