从脚本中打开新的 konsole,执行命令并在结束时变得可交互

Has*_*own 4 bash automation konsole interactive

我希望能够获得一个脚本(在启动时运行)来打开konsole终端。
当它打开时,它会做一些持久的事情(比如更改目录和源 bashrc)并运行一个长时间运行的程序。
如果程序崩溃或我进来了<ctrl+c>,它会开始接受来自标准输入的命令(例如“向上输入”以再次尝试,就好像它一直是交互式的一样)。

我已经尝试了很多方法来让它工作(我目前只是试图让它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"
Run Code Online (Sandbox Code Playgroud)

跟引号有关吗?我不应该使用它们,我应该逃避什么吗?
我什至打算尝试执行bash吗?
我的想法用完了,但我希望它甚至可以实现(但希望不是我错过的令人尴尬的简单)。

如果konsole特别是问题,我会赞成成功使用其他终端模拟器的答案(但由于问题具体是关于konsole我认为我不能给你多汁的勾号)

Has*_*own 6

感谢@n.st 的评论,我制作了这个班轮:

konsole -e /bin/bash --rcfile <(echo "cd /;ls;echo hi | less")
Run Code Online (Sandbox Code Playgroud)

这只是一个没有 tmpfiles 的较短版本,使用 bash 进程替换以下内容;

echo "cd /;ls;echo hi | less" > /tmp/konsolebash;konsole -e /bin/bash --rcfile /tmp/konsolebash
Run Code Online (Sandbox Code Playgroud)

它将运行一些命令,让它们显示,改变环境,运行一个长时间运行的程序 ( less) 并且当它结束时 ( :q) 将是交互式的。
所以cd /;ls;echo hi | less用你的脚本替换(演示)。

没有历史记录,但至少您现在位于正确的目录中,并且拥有您可能想要设置的任何环境变量。


与我之前的尝试基本相同;

konsole -e "echo ls > /tmp/konsolebash;/bin/bash -i --rcfile /tmp/konsolebash"
Run Code Online (Sandbox Code Playgroud)

除了文件写入在konsole执行之外,我已经删除了-i标志并且执行参数不在一个引号中


不幸的是,--rcfile开关会导致您~/.bashrc没有为这些命令加载,所以如果您需要别名或其他东西,您必须这样做;

cat ~/.bashrc > /tmp/konsolebash; echo "commands" >> /tmp/konsolebash;konsole -e /bin/bash --rcfile /tmp/konsolebash
Run Code Online (Sandbox Code Playgroud)

它只是复制您的 bashrc 然后您的命令附加到它的末尾