Shell
我可以生成一個複製目前終端的新終端嗎?
因此,假設我正在 /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
)——因此這個腳本還有改進的餘地。