【问题标题】:Piping to a process when the process doesn't exist?当进程不存在时管道到进程?
【发布时间】:2017-05-13 01:41:39
【问题描述】:

假设我从以下语句开始,其中echo-s 是一个字符串到ether:

$ echo "foo" 1>/dev/null

然后我提交以下管道:

$ echo "foo" | cat -e - 1>/dev/null

然后我把这个过程排除在外:

$ echo "foo" | 1>/dev/null

为什么这不返回错误消息?关于 bash 和管道的文档似乎没有直接提到可能是原因。在第一次读取echo(或在管道上游运行的任何进程)之前是否发送了 EOF?

【问题讨论】:

    标签: bash unix pipe


    【解决方案1】:

    shell 简单命令不需要有命令名。对于没有命令名的命令:

    • 变量分配适用于当前执行环境。下面会将两个变量设置为参数值:

      arg1=$1 arg3=$3
      
    • 重定向发生在子shell中,但子shell除了初始化重定向之外不做任何事情。以下将截断或创建指示的文件(如果您有适当的权限):

      >/file/to/empty
      

    但是,命令必须至少包含一个单词。完全空的命令是语法错误(这就是为什么偶尔需要使用:)。

    答案来自Posix XCU§2.9.1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-02
      • 2021-09-28
      • 1970-01-01
      • 2016-02-06
      • 2020-07-21
      • 1970-01-01
      • 2012-05-10
      相关资源
      最近更新 更多