我经常需要登录到其中一台服务器并转到这些机器上的几个目录之一 . 目前我做了这样的事情:
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]$
有一个简单,聪明或任何方式来做到这一点?
10 回答
您可以执行以下操作:
这样,您将在directory_wanted上获得一个shell .
说明
如果您不使用
-t
,则不会出现提示 .如果不添加
; bash
,则连接将关闭并将控制权返回给本地计算机你可以添加
到另一台主机上的
.bashrc
文件(或.profile
或其他任何你称之为的文件) . 这样,无论你做什么或从哪里开始,每当你登录到那台服务器时,它都会cd
到你正确的目录,而你所要做的就是像正常一样使用ssh
.诅咒,rogeriopvl的解决方案也有效,但它有点冗长,你必须记住每次都这样做(除非你做一个别名)所以它看起来有点“有趣” .
我已经连续创建了一个SSH和CD到服务器的工具 - 恰当地命名为sshcd . 对于该示例,您只需使用:732949_ d
如果您有任何疑问或问题,请告诉我!
基于对@ rogeriopvl的回答的补充,我建议如下:
通过
&&
链接命令将使下一个命令仅在前一个命令成功时运行(而不是使用;
,它按顺序执行命令) . 当需要cd
到执行命令的目录时,这尤其有用 .想象一下,做以下事情:
目录
teminal
不存在,这会导致您保留在主目录中并使用以下命令删除其中的所有文件 .如果您使用
&&
:找不到目录后该命令将失败 .
我使用环境变量CDPATH
在我非常具体的情况下,我只想在Jenkins从机的特定目录中的远程主机中执行命令:
但我的机器无法执行ssh(我无法分配伪tty)并让我发出以下错误:
我可以解决这个问题,将“cd to dir my command”作为ssh命令的参数(不必分配Pseudo-terminal)并通过传递选项-T显式告诉ssh命令我没有'需要伪终端分配 .
登录后直接进入的另一种方法是创建“别名” . 当您登录系统时,只需键入该别名,您就会进入该目录 .
示例:Alias = myfolder'/ var / www / Folder'
登录到别名的系统类型后(这适用于系统的任何部分)
如果不在bashrc中,此命令将适用于当前会话 . 所以你也可以将这个别名添加到bashrc中以便将来使用它
$ myfolder =>将您带到该文件夹
用
-t
的想法更进一步 . 我保留一组脚本调用下面的脚本去我经常访问的主机中的特定位置 . 我将它们全部保存在~/bin
中并将该目录保存在我的路径中 .SSH本身提供了一种通信方式,它对目录一无所知 . 既然你可以指定要执行哪个远程命令(这是 - 默认情况下 - 你的shell),我就从那里开始 .
只需使用以下命令修改您的家:
usermod -d /newhome username