如何在使用ssh登陆虚拟机时跳转到同步的目录下?


简单来讲我遇到了这个问题:


 tmp='cd '`pwd | cut -c 22-`' && bash' && ssh -i /my/abstract/path/to/private_key vagrant@127.0.0.1 -p 2222 -t $tmp

这个指令在zsh终端里可以正确执行,但是写成别名就不能正确执行了。


 v="tmp='cd '`pwd | cut -c 22-`' && bash' && ssh -i /my/abstract/path/to/private_key vagrant@127.0.0.1 -p 2222 -t $tmp"

如果想了解一下这个命令的来源可以看一下面这一堆话。


本地使用vagrant搭建了调试环境。为了方便地进入虚拟机,在主机上配置了如下别名:


 alias vbox="ssh -i /my/abstract/path/to/private_key vagrant@127.0.0.1 -p 2222"

但是懒癌又发作了,我希望可以在 已经同步到虚拟机的开发目录 的任意子目录下,快速跳到虚拟机对应的目录中。
比较绕口,举个例子:

  1. 配置了主机目录 /User/username/my_project/ 同步到虚拟机的目录 /home/vagrant/my_project/
  2. 当位于主机的 /User/username/my_project/foo/ 时,希望可以ssh到虚拟机并且直接跳转到 /home/vagrant/my_project/foo/ 目录下。

于是几乎不会shell编程的我写出了如下指令:


 tmp='cd '`pwd | cut -c 22-`' && bash' && vdouban -t $tmp

此处 pwd | cut -c 22- 在我的电脑上可以直接获取到对应的虚拟机下的目录,目前没有想到更灵活的做法。


回到刚才的问题,我的别名写法错在哪里? 或者有什么更好的方式来解决我的需求?

vagrant ssh shell alias

TheXIII 10 years, 11 months ago

有个不用纠结的方案,既然


 tmp='cd '`pwd | cut -c 22-`' && bash' && ssh -i /my/abstract/path/to/private_key vagrant@127.0.0.1 -p 2222 -t $tmp

可以正确执行,那么你直接将这个命令写入一个shell脚本好了,放在系统PATH里面,执行脚本和alias是一样的效果。

goenitz answered 10 years, 11 months ago


 bash


 alias vbox='cwd=`pwd | cut -c 22-` && ssh -i /my/abstract/path/to/private_key vagrant@127.0.0.1 -p 2222 -t "cd $cwd && /bin/bash"'

十二的手办 answered 10 years, 11 months ago

Your Answer