echo string >> 文件不起作用

echo string >> 文件不起作用

我写了以下脚本:

对于“find . -名称 '*'.cpp | $IN_REGEX | grep $IN_REGEX | grep -v $OUT_REGEX`
    echo“输出文件是$OUTPUT_FILE”
    count=`git log --pretty=格式: --name-only $文件名 | grep -v ^$ | | grep -v ^$ |厕所-l`
    echo "$count $文件名" >> $OUTPUT_FILE
完毕

但没有任何内容被写入输出文件中。

请注意:

  1. OUTPUT_FILE我已经设置了、IN_REGEX和的值OUT_REGEX
  2. 正在执行循环内的代码。我通过sh -x调用检查了这一点。
  3. 当我删除时,>> $OUTPUT_FILE我得到输出。
  4. 我尝试了touch $OUTPUT_FILE脚本内部,效果很好。

有人可以指出我的错误吗?

答案1

$OUTPUT_FILE 是否存在?它的权限是什么(ls -l $OUTPUT_FILE, getfacl $OUTPUT_FILE)?被执行了多少次echo "Output file..."? (我会把那个放在外面for,但这是你的决定)?

(我怀疑你的find ...管道没有返回任何东西)

答案2

以下是一些可能可以帮助您解决此问题的想法:

  • 不要将标准重定向到文件,而是将其通过管道传输到tee并包含您的文件。希望您应该在 stdout 上看到输出(并将其转到 $OUTPUT_FILE)。例如:

    echo "$count $文件名" |三通 $OUTPUT_FILE

  • 对 $OUTPUT_FILE 使用绝对路径,而不是相对路径,这样它就不会依赖于调用脚本的位置。如果您使用的是相对的,您可能没有在正确的位置查找输出文件。

  • 继续使用 -x 调用脚本,以便您可以准确地看到运行它时发生的情况。确保在重定向时设置 $OUTPUT_FILE 的值。

  • 如果您不打算使用 sh,您可以在 bash 中尝试您的脚本。然后,您可以使用 set 内置命令来使用一些 bash 选项(请参阅 参考资料help set)。开发脚本时,如果返回非零退出状态,则执行“set -e”以使脚本退出会很有用。您可能还需要处理管道故障的状态。因此,为了帮助调试,您可以将其放在脚本的顶部:

    set -x
    set -e
    # Optionally:
    set -o pipefail
    

相关内容