Shell

我可以生成一個複製目前終端的新終端嗎?

  • February 12, 2014

因此,假設我正在 /asdf/qwer/dfgh/wert/asdf/qwer 目錄中開發程式碼,並且在我的路徑中添加了大約三個類似的目錄,並且我設置了一堆神秘的環境變數。然後我意識到我真的需要打開另一個終端並以同樣的方式設置(儘管這種需要不會再次發生,所以我只需要更改我的 .bashrc)。是否有任何命令可以打開一個與此完全相同的新終端視窗?

如果您可以從命令行執行終端程序,則複製路徑很容易。假設您正在使用xterm,只需xterm &從要複製的終端的提示符下執行。新的 xterm 將在同一目錄中啟動,除非您將其配置為作為登錄 shell 啟動。任何導出的環境變數也將繼續,但未導出的變數不會。

複製整個環境(包括未導出的變數)的快速而骯髒的方法如下:

# from the old shell:
set >~/environment.tmp

# from the new shell:
. ~/environment.tmp
rm ~/environment.tmp

如果您設置了任何自定義 shell 選項,則還必須重新應用這些選項。

您可以將整個過程包裝成一個易於執行的腳本。讓腳本將環境保存到已知文件,然後執行xterm. 讓你的 .bashrc 檢查那個文件,找到它並刪除它。


或者,如果您不想從另一個終端啟動一個終端,或者只是想要更多控制,您可以使用您在 .bashrc 中定義的一對函式:

putstate () {
   declare +x >~/environment.tmp
   declare -x >>~/environment.tmp
   echo cd "$PWD" >>~/environment.tmp
}

getstate () {
   . ~/environment.tmp
}

編輯:更改putstate為複制 shell 變數的“導出”狀態,以匹配其他方法。還有其他可以複製的東西,例如 shell 選項(請參閱 參考資料help set)——因此這個腳本還有改進的餘地。

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