我经常登录到服务器,然后 cd 进入特定目录。是否可以将这两个命令简化为一个?
ssh bob@foo
cd /home/guest
如果可能的话,我想避免更改“foo”上的任何内容,因为我必须与服务器管理员一起清除它。我使用 bash,但我愿意接受其他 shell 中的答案。
答案1
这适用于 OpenSSH:
ssh -t bob@foo 'cd /home/guest && exec bash -l'
最后一个参数在您的登录 shell 中运行。-t
传递给ssh
强制ssh
分配伪终端的标志,这对于交互式 shell 是必需的。-l
传递给bash 的标志bash
作为登录外壳。
答案2
只需将 foo 上的 ~bob/.bash_profile 文件的最后一行放在:
cd /home/guest >& /dev/null
现在,每次您登录(无论是通过 SSH 还是其他方式)时,都会运行 cd 命令。不需要用 ssh 搞乱。
我知道您写道,您“希望尽可能避免更改 'foo' 上的任何内容”,但如果 bob@foo 帐户是您的,则更改您自己的 .bash_profile 应该是可以接受的,不是吗?
答案3
您也可以这样做,类似于@EvanTeitelman的解决方案:
$ ssh -t bob@foo "cd /tmp ; bash"
或者,如果您不知道另一端的外壳:
$ ssh -t bob@foo "cd /tmp && exec \$SHELL"
或者像这样:
$ ssh -t bob@foo 'cd /tmp && exec $SHELL'