我对此并不抱太大希望,但我试图创建一个桌面快捷方式,当单击该快捷方式时,会打开一个终端(最好是 mate-terminal,但我并不挑剔),运行一个命令,并让终端保持打开状态互动环节。理想情况下,我可以在新窗口中向上箭头以重新运行该命令。
我尝试过的事情:
mate-terminal --command "bash -c 'ls;$SHELL'"
:我看不到运行了什么命令,也无法按向上箭头来重新运行该命令。Changing the MATE terminal preferences to Keep Open
:它让窗口保持打开状态,但无法交互。我所能做的就是关闭它。xterm -hold -e 'bash -c "ls"&&$SHELL'
:我看不到运行了什么命令,也无法按向上箭头来重新运行该命令。
我想做的是为命令行应用程序创建一个快捷方式,该快捷方式打开终端并运行whatevertool -h
,然后等待用户执行他们需要执行的操作。我想要的可以实现吗?
答案1
您可以简单地尝试组合--rcfile
选项并修改历史记录。
export CMD="ls -h ." && mate-terminal --command "bash -c 'bash --rcfile <(echo \" history -s '\''$CMD'\''; $CMD\")' "
如果运行的命令更复杂,我会使用显式脚本,而不是涉及引用问题的复杂命令到文件重定向
mate-terminal --command "bash --rcfile cmd.sh "
其中 cmd.sh
#!/bin/bash
CMD="ls -lh ."
history -s "$CMD"
$CMD
答案2
安装expect
并编写以下期望脚本:
#!/usr/bin/expect
spawn bash
expect "$ "
send "yourcommand\r"
interact
(如果您的 shell 提示符以“$”以外的其他内容结尾 - 例如,您计划从 root 运行此命令 - 请在第三行进行适当更改。)
配置您的 GNOME 或 MATE 终端配置文件以运行此脚本而不是 shell,并使用该配置文件启动终端(例如gnome-terminal --window-with-profile=PROFILENAME
- 创建快捷方式来运行此命令)。
这应该可以满足您的要求:您将看到正在运行的命令,并且应该能够使用向上箭头返回到它,并且终端在命令结束后保持交互状态。