Bash
~./bashrc 執行後通過 ssh 改變遠端機器的目錄
我正在嘗試通過 ssh 在遠端機器上執行腳本。為此,我想更改目錄並從那裡執行腳本。我發現如何做到這一點的標準方法是:
ssh -Y -t user@server 'cd dir; exec bash'
然而,問題是在執行我的腳本之前,我需要設置一些我在 ~./bashrc 中做的進一步的 scipts。我的問題是命令的編寫方式是在 ~./bashrc 甚至執行之前更改目錄,即弄亂了我之前需要設置的程式碼。注意:將命令更改為
ssh -Y -t user@server 'exec bash; cd dir'
正常執行 bash,但之後不會更改目錄。提前致謝。
我的問題是命令的編寫方式是在 ~./bashrc 甚至執行之前更改目錄
更有可能
~/.bashrc
根本沒有被閱讀。Bash 只有~/.bashrc
在作為互動式(非登錄)shell 呼叫時才會讀取。當您在ssh
命令行上發出要執行的命令時,它會使用該選項執行 shell-c
,這使其成為非互動式的。
.bashrc
但是您可以通過手動採購來解決這個問題:ssh -t user@server '. ~/.bashrc; cd dir; exec bash'
一些
bashrc
文件檢查 shell 是否是互動式的,如果是,則只進行更改。(這聽起來沒有必要,因為bashrc
它只能從互動式 shell 中讀取,但由於 Bash 的啟動文件的工作方式,bashrc
通常也來自.bash_profile
或等效的來源。)要解決這個問題,您需要強制對 Bash 進行互動式呼叫,如下所示:
ssh -t user@server 'bash -ic "cd /tmp; exec bash"'
.bashrc
現在應該不需要手動採購,因為-i
Bash 自己做。第二個Bash (來自exec bash
)也可以,所以如果這是一個問題,請將最後一部分替換為exec bash --norc
.…
將相關設置拆分到不同的文件(例如
.thingy.rc
)可能是個好主意。然後從.bashrc
(如有必要)和 SSH 命令而不是.bashrc
.