【问题标题】:how to pass a string as a command to a for loop in a bash script如何将字符串作为命令传递给bash脚本中的for循环
【发布时间】:2016-05-27 14:52:06
【问题描述】:

我正在编写一个 bash 脚本(我是这样做的新手),它将遍历我的所有文件以使用 GIT 提交。但是,当我将命令传递给 for 循环时,出现以下错误: 致命:不明确的参数“|”:未知修订版或路径不在工作树中。 我传递给循环的命令在终端中运行良好。我有以下脚本:

我按如下方式运行脚本:BYPASS_LEGACY=yes ./check_debug_code.sh

#!/bin/bash

if [ "$BYPASS_LEGACY" == "yes" ]
then
gitCommand="git diff --cached --name-only | egrep -v'(folder1|folder2|([A-Za-z])\w+.*X)'" 
else
gitCommand="git diff --cached --name-only"
fi

DEBUG_CODE_FOUND="no"

for i in "$($gitCommand)"
do 
r=$(grep -nrH --color=always 'dump\|print_r\|console.log(\|var_dump(\|echo\|print(' $i) 
if [ "$r" != "" ];then
echo "$r"
DEBUG_CODE_FOUND="yes"
fi
done
if [ "$DEBUG_CODE_FOUND" == "yes" ];then
   echo "======================please remove the Debug to be able to commit.========================"
exit 1
fi
exit 0

任何帮助都会非常有帮助。

谢谢。

【问题讨论】:

  • 你想要的是eval或bash -c。
  • 感谢它使用 eval 工作。
  • 对未来的预防措施 - 在组装这样的命令时,请特别注意您使用的任何变量,因为它们可能会严重破坏您的脚本。 (例如 - eval "git something $variable" 之类的语句)。
  • 请开始缩进和学习 bash 编码风格。这不好玩。

标签: git bash shell ubuntu grep


【解决方案1】:

您想要的是eval 或bash -c。 – rr

【讨论】:

    猜你喜欢
    • 2016-01-12
    • 2015-11-15
    • 1970-01-01
    • 2012-10-21
    • 1970-01-01
    • 2015-03-24
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多