我希望能够获得一个脚本(在启动时运行)来打开终端konsole
。
当它打开时,它会执行一些持久性操作(例如更改目录和源 bashrc)并运行一个长时间运行的程序。
如果程序崩溃或我进入<ctrl+c>
它,它会开始接受来自标准输入的命令(例如“up-enter”重试,好像它一直都是交互式的)。
我尝试了很多方法来让它工作(我目前只是想让它ls
在完成后恢复到交互状态);
konsole -e ls
konsole --hold ls
konsole -e /bin/bash -c ls
konsole --hold -e "/bin/bash -c ls"
konsole -e "/bin/bash -i -c ls"
konsole -e /bin/bash -i -c ls
konsole -e "echo ls > /tmp/konsolebash;/bin/bash -i --rcfile /tmp/konsolebash"
echo ls > /tmp/konsolebash
konsole -e "/bin/bash -i --rcfile /tmp/konsolebash"
这与引号有关吗?我不应该使用它们,我应该逃避某些事情吗?我
是否应该尝试执行bash
?
我的想法已经用完了,但我希望这是可以实现的(但希望不是我错过的令人尴尬的简单的事情)。
konsole
如果存在特定问题,我会对成功使用其他终端仿真器的答案投赞成票(但由于问题具体是关于konsole
我不认为我可以给你多汁的勾选)
答案1
感谢@n.st 的评论,我写了以下这段代码:
konsole -e /bin/bash --rcfile <(echo "cd /;ls;echo hi | less")
这只是一个没有 tmpfiles 的较短版本,使用 bash 进程替换以下内容;
echo "cd /;ls;echo hi | less" > /tmp/konsolebash;konsole -e /bin/bash --rcfile /tmp/konsolebash
它将运行一些命令,让它们显示出来,更改环境,运行一个长时间运行的程序(less
),并且当它结束时(:q
)将是交互式的。
因此,用您的脚本替换cd /;ls;echo hi | less
(演示)。
没有历史记录,但至少您现在位于正确的目录中,并且拥有您可能想要设置的任何环境变量。
基本上和我之前的尝试相同;
konsole -e "echo ls > /tmp/konsolebash;/bin/bash -i --rcfile /tmp/konsolebash"
除了文件写入在konsole
执行之外,我已经删除了-i
标志,并且执行参数不在一个引用块中
不幸的是,该--rcfile
开关导致您~/.bashrc
无法加载这些命令,所以如果您需要别名或类似的东西,你就必须这样做;
cat ~/.bashrc > /tmp/konsolebash; echo "commands" >> /tmp/konsolebash;konsole -e /bin/bash --rcfile /tmp/konsolebash
然后只复制你的 .bashrc附加你的命令到它的末尾
答案2
一个更短更简单的解决方案:
konsole -e '$SHELL -c "ls; $SHELL"' &
这个也没有历史或来源问题.bashrc
。如果您的$SHELL
环境变量没有指向 bash,您可以手动指定它。
这确实会在同一个终端窗口内产生第二个(bash)shell,因此第一个命令中的一些内容可能不会被延续。
答案改编自 askubuntu回答。