Perl

perl 不能 exec 到二進制

  • July 29, 2020

在我全新安裝的 Debin 中,預設安裝了 perl 解釋器(換句話說,我還沒有其他 perl 包)。但是,嘗試這樣做:

$ls
a.cpp b.cpp
$ perl -e 'system "g++ -o a.out a.cpp b.cpp"; exec "a.out"'

沒有輸出(沒有錯誤,什麼都沒有)。perl 正確使用了該system命令(即 - 它創建了a.out執行檔),但無法派生它。為什麼?

答案在文件中,exec但很難看出您是否不知道自己在尋找什麼。

如果 LIST 中有多個參數,則使用 LIST 中的參數呼叫 execv p (3)。如果 LIST 中只有一個元素,則檢查參數是否有 shell 元字元,如果有,則將整個參數傳遞給系統的命令 shell 進行解析 (…)。如果參數中沒有 shell 元字元,則將其拆分為單詞並直接傳遞給 execv p (…)。

在所有情況下,命令名稱都需要進行路徑查找(通過 Perl 或通過 shell):如果它不包含 a /,則在命令搜尋路徑 ( ) 中查找它,該路徑$PATH通常不包含目前目錄.

改成

exec "./a.out"

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