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

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

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


当前回答

我使用环境变量CDPATH

其他回答

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

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

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

$ myfolder =>带您到该文件夹

简单地修改你的家命令: Usermod -d /newhome用户名

SSH本身提供了一种通信手段,它不知道任何关于目录的信息。因为您可以指定要执行哪个远程命令(默认情况下,这是您的shell),所以我将从这里开始。

我知道这个问题很久以前就有答案了,但我在尝试将ssh登录合并到bash脚本中时发现了这个问题,登录后运行几个命令,然后注销并继续使用bash脚本。我发现的最简单的方法,在其他地方没有提到,因为它是如此琐碎,就是这样做。

#!/bin/bash

sshpass -p "password" ssh user@server 'cd /path/to/dir;somecommand;someothercommand;exit;'

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

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