重定向后未创建文件并出现“cp:无法统计”错误

重定向后未创建文件并出现“cp:无法统计”错误

在下面的 bash 脚本中,我检查文件是否存在,如果不存在,我创建它并向其中写入一个简单的代码片段。它工作过一次(我不知道为什么),但我想我已经改变了一些东西,它不再工作了,我找不到我的错误在哪里:

#...

template_file="~/mytest_template.c";

if [[ -z $template_file ]]; then
   echo -e "#include <stdio.h>\n#include <stdlib.h>\n\n\nint main(int argc, char**argv){\n\n\t\n\nreturn 0;\n}" > ~/mytest_template.c;
fi

#sleep 0.5; ---> I tried this too.

cp ~/mytest_template.c mytest.c;

我得到的错误是这样的: cp: cannot stat '/home/username/mytest_template.c': No such file or directory

谢谢。

答案1

if [[ -z $template_file ]]; then

-z运算符测试字符串是否为空。在这里, 的值template_file不为空,因为您刚刚分配给它。因此,里面的命令if不会运行。

如果该文件在脚本运行之前不存在,那么它在运行脚本时也不会存在cp

我不确定您要在这里测试什么,但如果您想创建该文件以防它不存在,那么您需要使用! -f $filename.-f测试文件是否存在,并!反转测试。

另请注意,在作业中,波浪号不会展开,而是保持原样,因为它位于引号内:

template_file="~/mytest_template.c";

您不会在后续重定向或cp命令中使用该变量,因此不会出现问题。

所以,

template=~/mytest_template.c
final=~/mytest.c
if [[ ! -f $template ]]; then
    echo "..." > "$template"
fi
cp "$template" "$final"

相关内容