在單獨的 konsole 中執行命令,然後讓使用者鍵入命令
我在一家大公司從事軟體開發工作,我對所使用的整體技術幾乎沒有控制權,因此需要找到能夠在我所擁有的限制範圍內工作的解決方案。
**我正在做的事情:**我正在開發一個 UI,讓使用者可以根據他們正在從事的項目在特定環境中啟動 konsoles。我們目前有一個命令(我們稱之為“setContext”),使用者可以在他們的 konsole 中手動執行很多參數。setContext 做了很多工作,設置了很多環境變數。作為我的約束的一部分,我必須使用 konsole、tcsh 和這個 setContext 命令。我的 UI 需要做的就是用適當的參數編寫 setContext 命令,打開一個 konsole,然後為使用者執行該命令,之後他們將控制。
我生成的命令類似於:
konsole -e tcsh -c "setContext --someArgs"
這可行,但會立即關閉 konsole。
--noclose
在啟動 konsole 時使用該選項可使其保持打開狀態但不互動。這個問題的普遍接受的解決方案是在命令的末尾附加
;bash
或;$SHELL
,在我的情況下,我將其推斷為;tcsh
.這是以下連結以及許多其他連結中建議的內容:
- https://askubuntu.com/questions/20330/how-to-run-a-script-without-closing-the-terminal/1209836#1209836
- https://askubuntu.com/questions/46627/how-can-i-make-a-script-that-opens-terminal-windows-and-executes-commands-in-the
- 在終端中執行命令,然後讓我輸入更多命令
- https://askubuntu.com/questions/484993/run-command-on-anothernew-terminal-window
這幾乎可行,因為它確實使 konsole 保持打開狀態。事實上,這是我已經使用了數周而沒有遇到任何問題的方法,但是我們注意到再次執行
tcsh
所有setContext
初始化文件(~/.cshrc 等),這會重置一些由setContext
.這需要為數百個使用者工作,而且我無法控制 cshrc 文件,所以我需要找到一種方法來保持 konsole 處於打開狀態,而無需再次採購這些文件。我試過
tcsh -f
了,但這並不能保護環境。我整個下午都在網上搜尋,但沒有找到解決方案。雖然我理解環境和命令沒問題,但我不是專家,通常在 python 中工作。我之所以在這裡問,是因為我發現的所有內容要麼是上述答案的重新散列,需要修改 cshrc 文件,要麼遠高於我的水平,我無法破譯它。
提前致謝。
在再次獲取所有初始化文件(等)
tcsh
之後執行,這會重置 . 設置的一些變數。setContext``~/.cshrc``setContext
您可以通過將環境變數指向包含重置為其原始值的其他目錄,獲取使用者的
tcsh
or ,然後呼叫您的.~/.cshrc``HOME``.cshrc``HOME``~/.tcshrc``~/.cshrc``setContext
例如,
/fake/home
用作誘餌主目錄:konsole -e sh -c 'REAL_HOME=$HOME HOME=/fake/home exec tcsh'
包含
/fake/home/.cshrc
:setenv HOME "$REAL_HOME" if (-f ~/.tcshrc) then source ~/.tcshrc else if (-f ~/.cshrc) then source ~/.cshrc endif setContext # other aliases and initializations
是的,這是一個可怕的組合。找到更好的東西;-)