cat :如果命令行上没有给出输入文件,则不读取 stdin

cat :如果命令行上没有给出输入文件,则不读取 stdin

我有一个将文件与 连接的脚本cat。它大致包含以下行,如果目录不包含文件,则脚本会挂起读取标准输入:

cat /path/to/dir/* > concat.txt

有没有办法让它cat不从标准输入读取任何内容并产生一个空输出(如果不存在文件)/path/to/dir/,或者使用另一个命令来实现相同的目的?

答案1

似乎您已nullglob启用,因此/path/to/dir/*如果 中不存在任何文件,则 会扩展为无/path/to/dir/。当然,您可以禁用nullglobshopt -u nullglob)并获取默认行为,/path/to/dir/*如果没有匹配项,则 保持原样,并cat会抱怨不存在的文件:

$ cat /path/to/dir/*
cat: '/path/to/dir/*': No such file or directory

您也可以直接在/dev/null末尾添加一个:

$ shopt -s nullglob; cat /path/to/dir/* /dev/null
$ echo $?
0

cat将从 立即获得 EOF /dev/null,因此它不会写入任何内容并退出。

相关内容