我经常必须登录到几个服务器中的一个,然后进入这些机器上的几个目录中的一个。目前我做的事情是这样的:

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]$

有没有简单、聪明或任何方法可以做到这一点?


当前回答

连接用户

In case if you don't know this, you can use this to connect by specifying both user and host
ssh -t <user>@<Host domain / IP> "cd /path/to/directory; bash --login"

例如:ssh -t admin@test.com "cd public_html;bash——登录”

您还可以在每次登录时通过在双引号中使用a;每次命令前

其他回答

你可以加上

cd /some/directory/somewhere/named/Foo

到另一个主机上的.bashrc文件(或.profile或其他任何名称)。这样,无论您做什么或从哪里使用ssh,无论您何时登录到该服务器,它都将cd到适合您的目录,您所要做的就是像平常一样使用ssh。

骂人的是,rogeriopvl的解决方案也工作,但它有点啰嗦,而且你必须记住每次都这样做(除非你做一个别名),所以它似乎有点不“有趣”。

在我非常具体的情况下,我只是想在一个远程主机上执行一个命令,在一个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"

登录后直接进入的另一种方法是创建“别名”。当你登录系统时,只要输入这个别名,你就会在那个目录下。

示例:Alias = myfolder '/var/www/Folder'

登录到系统后,输入该别名(这可以从系统的任何部分进行) 这个命令如果不在bashrc中,将适用于当前会话。因此,您还可以将这个别名添加到bashrc,以便将来使用它

$ myfolder =>带您到该文件夹

根据@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 *

如果找不到目录,该命令将失败。

我使用环境变量CDPATH