
我經常需要透過 SSH 登入遠端主機,我喜歡使用 bash 選項set -o vi
,而且通常必須cd
登入特定目錄。由於這些主機是短暫的(它們定期建立和銷毀),我無法登入它們並將它們保存在 /.bash_profile
中.bashrc
。因此,我正在研究如何在透過 SSH 連線時執行此操作,這樣我就不必每次連接到遠端伺服器時都鍵入相同的命令。我嘗試了多種方法來實現這一目標,但似乎都不起作用。有人可以幫我正確執行這個指令嗎?簡而言之,這就是我想做的事。
cd
到特定目錄- 設定 bash 選項
set -o vi
我嘗試這樣做的方法如下:
ssh [email protected] -t "cd /data; exec bash --login -c \"set -o vi\""
我覺得這確實有效,但 SSH 會話會終止,因為一旦set -o vi
執行命令,會話就會斷開連接,並顯示以下訊息:
與 remotehost.com 的共享連線已關閉。
有沒有辦法在執行這些命令後保持會話打開,或者是否有其他方法來實現我想要的?
答案1
一些選項:
ssh -t [email protected] 'cd /data && exec bash --login -o vi'
(它適用於所有類似 POSIX 的 shell,包括ksh
/ zsh
/ dash
... 作為-o
POSIX 實用程式的標準選項sh
,並且vi
恰好是標準選項之一。該命令列還與所有主要 shell 系列的 shell 相容,包括 Bourne, csh、 rc、fish 因此無論root 使用者的登入shell 是什麼,都應該可以工作)
或者:
ssh-t[電子郵件受保護]'cd /data && exec env SHELLOPTS=vi bash --login'
實際上,您不想使用第二個。這意味著該$SHELLOPTS
變數將位於環境中並影響所有bash
調用(非互動式呼叫將從互動式 shell 繼承調用,從而導致各種問題)。
另請注意,它bash
有兩組選項,一組使用-o
/設置$SHELLOPTS
,一組使用-O
/設置$BASHOPTS
)。
答案2
將其設為兩個命令。
- 將要在遠端主機上執行的命令放入檔案中
.bashrc.tmp
。 $ scp .bashrc.tmp [email protected]:
$ ssh <options> [email protected] "bash --login --rcfile ${HOME}/.bashrc.tmp"
這樣您甚至不需要備份原始的.bashrc
.
答案3
為了簡化從主機上的一個資料夾到另一個資料夾的跳轉,您可以安裝apparix並在需要跳轉的不同位置設定書籤,然後to folderX
在apparix中使用:https://micans.org/apparix/man/apparix.html
答案4
我使用的是具有共享用戶 ID 的遠端系統,因此我不想編輯啟動文件,因為它也會影響其他人。不過,您在這裡的帖子向我展示瞭如何設定vi
我想要的選項。這是我放入~/.ssh/config
文件中的內容
Host testsystem
User tester
RequestTTY yes
RemoteCommand exec /bin/bash --login -o vi
這非常簡單。不知道你想要的「cd」部分。