Linux

為什麼“文件 xxx.src”導致“無法打開 `xxx.src’(沒有這樣的文件或目錄)”但退出狀態為 0(成功)?

  • April 1, 2021

為什麼file xxx.src導致cannot open xxx.src’ (No such file or directory)`但退出狀態為0(成功)?

$ file xxx.src ; echo $?
xxx.src: cannot open `xxx.src' (No such file or directory)
0

注意:比較ls

$ ls xxx.src ; echo $?
ls: cannot access 'xxx.src': No such file or directory
2

此行為記錄在 Linux 上,並且是 POSIX 標準所要求的。從fileUbuntu 系統的手冊中:

EXIT STATUS
    file will exit with 0 if the operation was successful or >0 if an error was encoun‐
    tered.  The following errors cause diagnostic messages, but don't affect the pro‐
    gram exit code (as POSIX requires), unless -E is specified:
          •   A file cannot be found
          •   There is no permission to read a file
          •   The file type cannot be determined

使用-E(如上所述):

$ file -E saonteuh; echo $?
saonteuh: ERROR: cannot stat `saonteuh' (No such file or directory)
1

Linux 上的非標準-E選項記錄為

在文件系統錯誤(未找到文件等)上,不要像 POSIX 要求的那樣將錯誤作為正常輸出處理並繼續執行,而是發出錯誤消息並退出。

file實用程序的 POSIX 規範說(我的重點):

如果操作數命名的文件file不存在,無法讀取,或者文件操作數命名的文件類型無法確定,則不應認為是影響退出狀態的錯誤

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