仅当存在时才写入 FIFO

All*_*ial 2 shell bash io-redirection fifo

我看到的大多数关于写入 FIFO 的示例都说使用echoorcat命令并将标准输出重定向到文件。例如,

echo 'a' > /tmp/my_fifo
Run Code Online (Sandbox Code Playgroud)

但是,如果 FIFO 尚不存在,这将创建一个常规文件。是否有一些类似的东西,mkfifo但是如果它不存在就会失败?也就是说,类似于:

echo 'a' | write-to-existing-file /tmp/my_fifo
Run Code Online (Sandbox Code Playgroud)

Chr*_*her 9

根据 BASH 手册:

-p file
   True if file exists and is a named pipe (FIFO).
Run Code Online (Sandbox Code Playgroud)

所以:

if [[ -p /tmp/my_fifo ]]; then
    # commands to execute
fi
Run Code Online (Sandbox Code Playgroud)

问题有标签,bash。在上下文中,使用[[]]专用于BASH。(切圆,[[并且]]还与zsh的和Korn外壳的工作。)见BashFAQ / 031。应使用可移植脚本编写[]在所有 POSIX shell 中工作。