【问题标题】:how do you escape shebang line when generating a shell script生成shell脚本时如何转义shebang行
【发布时间】:2012-05-07 16:16:44
【问题描述】:

我正在从脚本中生成一个 shell 脚本,它需要 root 权限,所以我使用

sudo bash -c "echo 'Hello There!' > '/var/www/cgi-bin/php-cgi-5.3.8'"

如果我尝试输出 shebang 行并且我不确定如何转义它,我会收到错误 - 就像我对其他变量所做的那样。

sudo bash -c "echo '#!/bin/bash

version=\"5.3.8\"
export PHPRC=/etc/php/phpfarm/inst/php-\${version}/lib/php.ini
export PHP_FCGI_CHILDREN=3
export PHP_FCGI_MAX_REQUESTS=5000
exec /etc/php/phpfarm/inst/php-\${version}/bin/php-cgi' > '/var/www/cgi-bin/php-cgi-5.3.8'"

我哪里错了?

【问题讨论】:

    标签: php bash shell


    【解决方案1】:

    ! 正在您的 bash_history 中寻找以 ' 开头的命令。你应该有'!不加引号并用反斜杠转义它。您也可以将 # 从引号中取出并将其转义,因为 \ 比两个引号短。

    sudo bash -c "echo \#\!'/bin/bash
    
    version=\"5.3.8\"
    export PHPRC=/etc/php/phpfarm/inst/php-\${version}/lib/php.ini
    export PHP_FCGI_CHILDREN=3
    export PHP_FCGI_MAX_REQUESTS=5000
    exec /etc/php/phpfarm/inst/php-\${version}/bin/php-cgi' > '/var/www/cgi-bin/php-cgi-5.3.8'"
    

    【讨论】:

    • 我认为第一个单引号应该在“echo”之后。
    • @gpojd 不,它在正确的位置。这就是为什么我逃脱了#
    • @PaulP.R.O. -- 很好的提示,非常感谢。
    【解决方案2】:

    ! 可能正试图用您的历史记录替换。试试...'#\!/bin/bash...

    【讨论】:

    • 或者先这样做set +o histexpand