如何确定进程替换的结果是否是文件路径

如何确定进程替换的结果是否是文件路径

如果我这样做:

echo <(cat)

我得到:

/dev/fd/63

所以说在命令行我有:

myapp -f <(cat)

当我运行它时,我收到此错误:

您需要在 -f 标志后传递一个文件。解析的文件路径为:“/dev/fd/63”。文件系统上似乎不存在该路径。

如何确定进程替换的结果是否是实际文件(用于验证目的)?这是我的 bash 代码,它生成了错误:

  if [[ -L "$file_path" ]]; then
     file_path="$(readlink "$file_path")";
  fi

  if [[ ! -f "$file_path" ]]; then
    echo "You need to pass a file after the -f flag. The resolved file path was: '$file_path'. This path did not appear to exist on the filesystem".;
    return 1;
  fi

如果我去掉我的验证代码,我会得到这个:

无法打开以下文件进行读取:/dev/fd/63 EBADF:错误的文件描述符,打开“/dev/fd/63”

我用来从路径读取的node.js代码是:

const fd = fs.openSync(file_path, 'r');
fs.read(fd, ...);

答案1

要在 Bash 中确定字符串值是否是当前系统上的路径,请使用[[ -e "$path" ]]。这会检查路径是否存在,并且不对它指向的文件类型做出任何假设。

相关内容