Bash:当命令作为参数传递给函数时,引用被剥离

Modified on: Mon, 15 Apr 2019 22:40:02 +0800

我正在尝试为我的脚本实现一种干运行机制,并且当命令作为参数传递给函数并导致意外行为时,会面临引用被剥离的问题。

dry_run () {
    echo "$@"
    #printf '%q ' "$@"

    if [ "$DRY_RUN" ]; then
        return 0
    fi

    "$@"
}


email_admin() {
    echo " Emailing admin"
    dry_run su - $target_username  -c "cd $GIT_WORK_TREE && git log -1 -p|mail -s '$mail_subject' $admin_email"
    echo " Emailed"
    }

输出是:

su - webuser1 -c cd /home/webuser1/public_html && git log -1 -p|mail -s 'Git deployment on webuser1' user@domain.com

预期:

su - webuser1 -c "cd /home/webuser1/public_html && git log -1 -p|mail -s 'Git deployment on webuser1' user@domain.com"

启用printf而不是echo:

su - webuser1 -c cd\ /home/webuser1/public_html\ \&\&\ git\ log\ -1\ -p\|mail\ -s\ \'Git\ deployment\ on\ webuser1\'\ user@domain.com

结果:

su: invalid option -- 1

如果引号保留在插入位置,则不应该是这种情况。我也尝试过使用“eval”,差别不大。如果我删除了email_admin中的dry_run调用,然后运行脚本,那么它很有用。

作者:Shoaibi

最佳答案

尝试使用\"而不只是"

作者:James

相关问答

添加新评论