【问题标题】:bash script execute commands after sshbash脚本在ssh之后执行命令
【发布时间】:2014-12-13 14:28:08
【问题描述】:

我正在尝试通过我的第一个脚本执行一些命令,但它不起作用。

#!/bin/bash

#connect to server
echo "Connecting to the server..."

ssh -t root@IP '

    #switch user to deploy
    su - deploy

    #switch path
    echo "Switching the path"
    cd /var/www/deploys/bin/app/config

    #run deploy script
    echo "Running deploy script"

    /usr/local/bin/cap -S env=prod deploy

    #restart apache
    sudo /bin/systemctl restart  httpd.service

    bash -l
'

发生了什么?我已成功连接到服务器,用户已更改,然后我看不到任何事情发生。当我像在终端中那样按 ctrl + c 时,会出现一些应该执行的命令的输出,但有一些错误。

为什么我在启动脚本后看不到终端中发生的一切?我做错了吗?

顺便说一句:当我尝试手动连接并自己运行命令时,一切正常。

使用 CentOS 7。

【问题讨论】:

    标签: bash ssh centos


    【解决方案1】:

    通过ssh登录并执行一组命令的干净方式是

    ssh user@ip << EOF
       #some commands
    EOF
    

    这里EOF充当命令列表的分隔符

    脚本可以修改为

    ssh -t root@IP << EOF
    
        #switch user to deploy
        su - deploy
    
        #switch path
        echo "Switching the path"
        cd /var/www/deploys/bin/app/config
    
        #run deploy script
        echo "Running deploy script"
    
        /usr/local/bin/cap -S env=prod deploy
    
        #restart apache
        sudo /bin/systemctl restart  httpd.service
    
        bash -l
    EOF
    

    将执行命令并在之后关闭那里的连接

    【讨论】:

    • 我必须为 these instructions 添加 -t -t 但否则这很棒
    • 我可以删除bash -l吗?不太了解它的用途。