Bash

~./bashrc 執行後通過 ssh 改變遠端機器的目錄

  • July 19, 2019

我正在嘗試通過 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現在應該不需要手動採購,因為-iBash 自己做。第二Bash (來自exec bash)也可以,所以如果這是一個問題,請將最後一部分替換為exec bash --norc.

將相關設置拆分到不同的文件(例如.thingy.rc)可能是個好主意。然後從.bashrc(如有必要)和 SSH 命令而不是.bashrc.

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