【问题标题】:Continuing shell script execution after SSHing into guest machine?SSH 进入客户机后继续执行 shell 脚本?
【发布时间】:2015-04-08 21:09:08
【问题描述】:

我在我的 Windows 主机上使用 Vagrant 和 VirtualBox 设置了一个 Ubuntu 宾客机。我正在尝试编写一个 shell 脚本,它将...

  1. vagrant up
  2. vagrant ssh 一次 vagrant up 完成
  3. cd 成功通过 SSH 连接到来宾计算机后,进入来宾计算机中的特定项目目录

现在我的 vagrant_shell_script.sh 文件包含以下内容:

vagrant up && vagrant ssh && echo 'cd vagrant/rails_tutorial/sample_app'

当我在 Git Bash 中执行它时一切正常,包括通过 SSH 连接到客户机,但是在成功连接后,脚本似乎停止工作并且不执行最终的 cd 命令。我认为这是因为它不再能够通过那个特定的 Bash 实例直接与我的主机通信(如果我错了,请纠正我)。

SSH 连接成功后,有没有办法让它直接导航到目标目录?

如果这是一个愚蠢的问题,请原谅我——对于 bash 脚本来说相对较新。

【问题讨论】:

    标签: bash shell virtualbox git-bash


    【解决方案1】:

    This solved it. 这有点 hacky,但正在运行

    vagrant up && vagrant ssh -- -t 'cd /vagrant/rails_tutorial/sample_app; /bin/bash' 让你进入。出于某种原因,如果你不启动 shell,vagrant 会一直把你踢出去。

    vagrant ssh -- 允许您将命令传递到 SSH 客户端。这是 vagrant 自己的实用程序。下一个标志-t 是一个 SSH 标志,它允许 SSH 在将控制权交还给您之前执行某些命令。您将命令放在-t 标志之后,但请确保以<last command> ; /bin/bash 结束它,以便它为您启动一个shell,而您不会被踢出。

    【讨论】:

    • 无法在 Google 上搜索有关 ---t 项目的文档。您能否澄清一下它们的作用以及它们实际上在做什么?
    • 刚试了一下,得到了这个错误:bash: line 0: cd: vagrant/rails-tutorial/sample_app: No such file or directory 它确实vagrant up 和 SSH 很好,但最后仍然窒息。不知道为什么它在cd 之后输入冒号...
    • 你想在目录结构中的哪个位置?是vagrant/rails…在home目录下,还是你的意思是去/vagrant/rails…/…/?
    • 更新了答案。如果您需要更多帮助,请告诉我。尝试重新运行这个,在其中将/ 添加到您要去的目录中,即cd /vagrant/...
    • 是的,只要继续添加分号或双和号,一切都会被执行。最后调用 /bin/bash,这样你就不会被踢出局。我只是通过 cd 进入 /vagrant 然后 touch 在其中输入文件对其进行了测试。 $ vagrant ssh -- -t 'cd /vagrant/ && touch TEMP; /bin/bash'
    【解决方案2】:

    您还可以在 ssh 后使用 Heredoc 在脚本中使用与此类似的内容来运行命令:

    # Use heredoc to send script over ssh
    $ssh_cmd << 'END_DOC'
    
    cd <path>
    commands
    
    exit
    END_DOC
    
    echo $ssh_cmd
    

    【讨论】:

      猜你喜欢
      • 2015-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-30
      • 1970-01-01
      • 2020-07-24
      相关资源
      最近更新 更多