如果我这样做:
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" ]]
。这会检查路径是否存在,并且不对它指向的文件类型做出任何假设。