Terminal

在單獨的 konsole 中執行命令,然後讓使用者鍵入命令

  • October 8, 2020

我在一家大公司從事軟體開發工作,我對所使用的整體技術幾乎沒有控制權,因此需要找到能夠在我所擁有的限制範圍內工作的解決方案。

**我正在做的事情:**我正在開發一個 UI,讓使用者可以根據他們正在從事的項目在特定環境中啟動 konsoles。我們目前有一個命令(我們稱之為“setContext”),使用者可以在他們的 konsole 中手動執行很多參數。setContext 做了很多工作,設置了很多環境變數。作為我的約束的一部分,我必須使用 konsole、tcsh 和這個 setContext 命令。我的 UI 需要做的就是用適當的參數編寫 setContext 命令,打開一個 konsole,然後為使用者執行該命令,之後他們將控制。

我生成的命令類似於:

konsole -e tcsh -c "setContext --someArgs"

這可行,但會立即關閉 konsole。--noclose在啟動 konsole 時使用該選項可使其保持打開狀態但不互動。

這個問題的普遍接受的解決方案是在命令的末尾附加;bash;$SHELL,在我的情況下,我將其推斷為;tcsh.

這是以下連結以及許多其他連結中建議的內容:

這幾乎可行,因為它確實使 konsole 保持打開狀態。事實上,這是我已經使用了數周而沒有遇到任何問題的方法,但是我們注意到再次執行tcsh所有setContext初始化文件(~/.cshrc 等),這會重置一些由setContext.

這需要為數百個使用者工作,而且我無法控制 cshrc 文件,所以我需要找到一種方法來保持 konsole 處於打開狀態,而無需再次採購這些文件。我試過tcsh -f了,但這並不能保護環境。

我整個下午都在網上搜尋,但沒有找到解決方案。雖然我理解環境和命令沒問題,但我不是專家,通常在 python 中工作。我之所以在這裡問,是因為我發現的所有內容要麼是上述答案的重新散列,需要修改 cshrc 文件,要麼遠高於我的水平,我無法破譯它。

提前致謝。

在再次獲取所有初始化文件(等)tcsh之後執行,這會重置 . 設置的一些變數。setContext``~/.cshrc``setContext

您可以通過將環境變數指向包含重置為其原始值的其他目錄,獲取使用者的tcshor ,然後呼叫您的.~/.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

是的,這是一個可怕的組合。找到更好的東西;-)

引用自:https://unix.stackexchange.com/questions/613274