bash脚本在ssh之后执行命令

时间:2014-10-17 23:07:16

标签: bash ssh centos

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

#!/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就像在终端中那样,会出现应该执行的命令的一些输出但是有一些错误。

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

BTW:当我尝试手动连接并自己运行命令时,一切都运行良好。

使用CentOS 7。

1 个答案:

答案 0 :(得分:20)

通过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

将执行命令并在

之后关闭那里的连接