【问题标题】:Passing Bash Command Through SSH - Executing Variable Capture通过 SSH 传递 Bash 命令 - 执行变量捕获
【发布时间】:2015-02-26 07:26:43
【问题描述】:

我通过 SSH 直接传递以下命令:

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i /key/path server@111.111.111.111 'bash -s' << EOF
FPM_EXISTS=`ps aux | grep php-fpm`
if [ ! -z "$FPM_EXISTS" ]
then
        echo "" | sudo -S service php5-fpm reload
fi
EOF

我收到以下错误:

[2015-02-25 22:45:23] local.INFO: bash: line 1: syntax error near unexpected token `('
bash: line 1: ` FPM_EXISTS=root      2378  0.0  0.9 342792 18692 ?        Ss   17:41   0:04 php-fpm: master process (/etc/php5/fpm/php-fpm.conf)                 

这就像它试图执行ps aux | grep php-fpm 的输出,而不是仅仅捕获 git 变量。因此,如果我更改命令以尝试捕获 ls,它的行为就像它也尝试执行该命令一样,当然会为每个目录返回“找不到命令”。

如果我只是将 Bash 脚本的内容粘贴到一个文件中并运行它,它就可以正常工作;但是,我似乎无法弄清楚如何通过 SSH 传递它。

有什么想法吗?

【问题讨论】:

    标签: bash ssh


    【解决方案1】:

    您需要将开头的EOF 括在单引号中。否则 ps aux | grep php-fpm 将被本地 shell 解释。

    该命令应如下所示:

    ssh ... server@111.111.111.111 'bash -s' << 'EOF'
    FPM_EXISTS=$(ps aux | grep php-fpm)
    if [ ! -z "$FPM_EXISTS" ]
    then
            echo "" | sudo -S service php5-fpm reload
    fi
    EOF
    

    检查这个:http://tldp.org/LDP/abs/html/here-docs.html(第 19.7 节)


    顺便说一句,我鼓励您使用$() 而不是反引号,因此可以嵌套它们来进行命令替换。你会玩得更开心,相信我。例如:What is the benefit of using $() instead of backticks in shell scripts?

    【讨论】:

      【解决方案2】:

      您应该将EOF 括在单引号中。

      ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i /key/path server@111.111.111.111 'bash -s' << 'EOF'
      FPM_EXISTS=`ps aux | grep php-fpm`
      if [ ! -z "$FPM_EXISTS" ]
      then
              echo "" | sudo -S service php5-fpm reload
      fi
      EOF
      

      【讨论】:

      • 想知道与我的答案相比有何不同? (除了缺少的解释)
      • 发帖时间。 (嗯,没关系 - 但几乎是同一时间。;)
      • @hek2mgl,对不起我的朋友。在我开始编写和测试我的答案时,我没有看到您已经写了一些东西。
      • 也不是“种族”。但是,我真的看到有人在抄袭……对不起,责怪你! +1 不错的答案 ;)
      猜你喜欢
      • 2017-05-18
      • 2014-01-28
      • 1970-01-01
      • 2012-11-02
      • 1970-01-01
      • 2016-07-25
      • 1970-01-01
      • 2014-10-17
      • 2018-09-12
      相关资源
      最近更新 更多