linux - 测试命令和重定向 bash

标签 linux bash shell command-line scripting

为什么 test > file 以 1 退出,而 test arg1 > arg2 以 0 退出?

我认为在 test arg1 > arg2 中,首先应用 test arg1 然后将输出(它没有)写入文件 arg2由于最后一个命令(重定向)成功,退出为 0。但是第一种情况也应该如此。我有点困惑。

最佳答案

重定向不是命令。

| 创建一个新命令,因为不仅前一个命令的输出“通过管道传输”到其他地方,而且还对该输出执行了另一个命令。例如,

ls | grep 'abc' 将在没有匹配该模式的情况下退出 1,无论 ls 是否成功完成)。您在 $? 中看到的退出状态是最后一个管道的状态。

重定向不一样,因为它不会将输出提供给行中的下一个命令,只是提供给一个文件。请注意,重定向可以使您返回 1,否则您的命令将起作用,因为您没有写入文件的权限。在这种情况下,您的命令将不会被执行。

TL;DR:命令需要有效的重定向才能运行。如果可以运行,则退出状态将是命令的退出状态。重定向的退出状态是命令和重定向的OR(0 OR 1, 1 OR 1, 1 OR 0都会返回1;只有重定向成功,命令成功才返回0)

关于linux - 测试命令和重定向 bash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53384333/

相关文章:

bash - 如何在aspell词典中添加单词?

Bash:替换管道标准输入中的子字符串

bash - 在 shell 脚本中提取引号中的单词

linux - 需要 TAR shell 脚本帮助

python - 子进程命令显示 FileNotFoundError : [Errno 2] No such file or directory

linux - 文件重定向在 Bash 脚本中失败,但在 Bash 终端中失败

linux - Qt交叉编译Raspi3 - fatal error : unistd. h: No such file or directory

linux - 使用 docker-machine 更改文件组

c# - Linux 中的 Visual Studio Code - 将 F5(调试)从 "dotnet build"重新映射到 "msbuild csproj"?

php - Codeigniter 错误的系统文件夹路径