我经常必须登录到几个服务器中的一个,然后进入这些机器上的几个目录中的一个。目前我做的事情是这样的:
localhost ~]$ ssh somehost
Welcome to somehost!
somehost ~]$ cd /some/directory/somewhere/named/Foo
somehost Foo]$
我有脚本,可以确定哪个主机和哪个目录,我需要进入,但我不知道如何做到这一点:
localhost ~]$ go_to_dir Foo
Welcome to somehost!
somehost Foo]$
有没有简单、聪明或任何方法可以做到这一点?
在我非常具体的情况下,我只是想在一个远程主机上执行一个命令,在一个Jenkins从机的特定目录中:
ssh myuser@mydomain
cd /home/myuser/somedir
./commandThatMustBeRunInside_somedir
exit
但是我的机器不能执行ssh(我想它不能分配伪tty),并让我给出以下错误:
Pseudo-terminal will not be allocated because stdin is not a terminal
我可以绕过这个问题,将“cd to dir + my command”作为ssh命令的参数(不必分配伪终端),并通过传递选项-T显式地告诉ssh命令我不需要分配伪终端。
ssh -T myuser@mydomain "cd /home/myuser/somedir; ./commandThatMustBeRunInside_somedir"
根据@rogeriopvl的回答,我建议如下:
ssh -t xxx.xxx.xxx.xxx "cd /directory_wanted && bash"
使用&&链接命令将使下一个命令只在前一个命令成功时运行(与使用;相反,它按顺序执行命令)。当需要cd到执行该命令的目录时,这特别有用。
想象一下这样做:
/home/me$ cd /usr/share/teminal; rm -R *
目录teminal不存在,这导致您停留在主目录中,并使用以下命令删除其中的所有文件。
如果你使用&&:
/home/me$ cd /usr/share/teminal && rm -R *
如果找不到目录,该命令将失败。