SSH 进入远程 shell,执行“source”命令,并留在远程 shell

Des*_*ume 5 shell bash ssh ubuntu

我在s远程服务器上有一个名为 的脚本,用于激活这样的虚拟环境:

source venv/bin/activate
Run Code Online (Sandbox Code Playgroud)

当通过 SSH 连接到服务器时,我可以通过以下方式激活环境

. s
Run Code Online (Sandbox Code Playgroud)

我通过 SSH 进入服务器,如下所示:

ssh -t user@host "cd /path/to/dir ; /bin/bash"
Run Code Online (Sandbox Code Playgroud)

除了将工作目录更改为/path/to/dir它之外,如果我每次登录服务器时都可以立即激活环境,那就太好了。但是,无论身在何处,我把. s进入的SSH命令,利用-c/bin/bash与否,总是会立即结束。

Fel*_*xJN 6

使用新的源文件,例如 /home/user/.rcforssh

 #rc for ssh
 . /home/user/.bashrc
 . /home/user/venv/bin/activate  #or whichever location
Run Code Online (Sandbox Code Playgroud)

并登录

ssh -t user@host "cd /path/to/dir ; /bin/bash --rcfile /home/user/.rcforssh"
Run Code Online (Sandbox Code Playgroud)

旁注:source不是 POSIX,.而是。


更新以下讨论指定 OP 的需求:

要动态创建和删除修改后的源文件rcforssh,可以使用:

ssh -t user@host "cd /path/to/dir ; echo '. ~/.bashrc ; . s ; rm rcforssh' > rcforssh ; /bin/bash --rcfile rcforssh"
Run Code Online (Sandbox Code Playgroud)

即使用echo命令创建源文件并在所述文件中添加删除。