Bash

如何確定程序替換的結果是否是文件路徑

  • November 9, 2020

如果我這樣做:

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, ...);

要在 Bash 中確定字元串值是否是目前系統上的路徑,請使用[[ -e "$path" ]]. 這將檢查路徑是否*存在,*並且不對它指向的文件類型做出任何假設。

引用自:https://unix.stackexchange.com/questions/533742