
我希望能夠獲得一個腳本(在啟動時運行)來打開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"
跟引號有關係嗎?我不應該使用它們嗎?
我甚至打算嘗試執行嗎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回答。