如何测试命名管道是否存在?

psi*_*lia 16 bash

为了测试文件是否存在,我做:

if [ -f $FILE ];
Run Code Online (Sandbox Code Playgroud)

但是如果$ FILE是一个命名管道,它就不起作用,例如ls -l pipename显示一个带p属性的管道:

prw-r--r-- 1 usr grp 0 Nov 26 02:22 pipename
Run Code Online (Sandbox Code Playgroud)

如何测试命名管道是否存在?

iru*_*var 16

你可以使用-p测试

if [[ -p $pipe ]]
Run Code Online (Sandbox Code Playgroud)

要么

if [ -p "$pipe" ]
Run Code Online (Sandbox Code Playgroud)


小智 7

友好的手册页列出了几个文件测试操作符,包括:

-e file
       True if file exists.
Run Code Online (Sandbox Code Playgroud)

-f file
       True if file exists and is a regular file.
Run Code Online (Sandbox Code Playgroud)

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

不要只是一直使用-f; 用你做的意思.