当没有提供路径时,如何告诉“cat”命令不要挂起?

use*_*685 6 shell-script cat

我只是想获取一个 bash 脚本
来返回文本文件的内容。

#!/bin/bash
cat $1
Run Code Online (Sandbox Code Playgroud)

问题是.. 当文件路径没有提供给这个 bash 脚本时......它甚至如何关闭自己。

因为通过常规命令行......如果没有文件路径被提供给 cat 命令......它不会挂断。

几乎就像在等待什么一样..

Cre*_*eek 35

#!/bin/bash
if [[ "$#" -ne 1 ]]; then
    echo "Usage: $0 [INPUT FILE]" 1>&2
    exit 1
fi
cat "$1"
Run Code Online (Sandbox Code Playgroud)

  • 在我看来,这是更好的解决方案,因为它退出时出错 (4认同)

fro*_*utz 18

你的命令还有一个问题,如果文件名有空格怎么办?

#!/bin/bash
cat "$1"
Run Code Online (Sandbox Code Playgroud)

除非你有令人信服的理由不引用,否则总是引用。并且cat ""不挂。相反,它会产生一条错误消息,例如“没有这样的文件或目录”。

  • `cat ""` 不会挂起,但会打印一条错误消息:`cat:: No such file or directory`(指的是空字符串)。最好测试一下 `$1` 是否存在,大概是通过检查 `$#` 的值。 (4认同)

And*_*w B 5

catSTDIN如果您为它提供文件名,则将忽略。在这种情况下,连接STDIN/dev/null将是一个有效的解决方案。

$ cat test.sh
#!/bin/bash
cat $1 < /dev/null
$ ./test.sh test.sh
#!/bin/bash
cat $1 < /dev/null
$ ./test.sh
$
Run Code Online (Sandbox Code Playgroud)

这种方法的缺点是0如果没有提供文件名就会返回。没办法。未能打开指定的文件仍将返回失败。