我写了以下脚本:
对于“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 完毕
但没有任何内容被写入输出文件中。
请注意:
OUTPUT_FILE
我已经设置了、IN_REGEX
和的值OUT_REGEX
。- 正在执行循环内的代码。我通过
sh -x
调用检查了这一点。 - 当我删除时,
>> $OUTPUT_FILE
我得到输出。 - 我尝试了
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