Exec
exec 命令不接受 xargs,掛在命令輸入上
我不是很熟悉
exec
。我正在執行一些測試和範例。我想將寫入文件的命令傳遞給它。我希望該命令能夠exec
像直接在命令行上執行一樣執行。這是我設置和嘗試的:[kellyry@ch12ldvela00 ~]$ cat exec_test ls [kellyry@ch12ldvela00 ~]$ cat exec_test | exec [kellyry@ch12ldvela00 ~]$ cat exec_test | xargs exec xargs: exec: No such file or directory [kellyry@ch12ldvela00 ~]$ exec ls exec_test file2 file3 . . .
這是最奇怪的部分。執行最後一行
exec ls
不會返回。那是終端掛起,我無法與之通信。我認為最後一個問題可能是 Mobaxterm 的問題,我用它來 ssh 到伺服器。
從
bash
手冊頁:exec [-cl] [-a name] [command [arguments]]
如果
command
指定,它將替換外殼。不會創建新程序。$$ … $$ 如果
command
不指定,任何重定向都在目前 shell 中生效,返回狀態為 0。管道到
exec
你嘗試的第一件事是
cat exec_test | exec
這發送
ls
到exec
標準輸入,而不是作為參數。exec
執行時沒有參數,也沒有重定向,所以它什麼也不做。如果您想執行(或“執行”)文件中的命令,那不是
exec
目的。您可以使用source
(或縮寫.
)來做到這一點:source exec_test
管道到
xargs exec
你嘗試的下一件事
cat exec_test | xargs exec
exec
是 bash內置的。它僅在 bash 中可用,因此xargs
找不到它來執行它。
exec
在主殼中最後,你嘗試了
exec ls
這跑了
ls
,然後掛了終端。這是因為,如文件所述,它取代了 shell 程序。ls
完成後,終端中不再執行任何內容。(此時有些終端模擬器會自動關閉。幸運的是,你的沒有關閉,所以你仍然可以看到輸出。)您嘗試遵循的範例有一個額外的步驟:
bash exec ls
這首先啟動一個新的
bash
,作為“頂級”的子執行。然後exec ls
替換該外殼並退出。然後父外殼恢復,所以你不會留下一個卡住的終端。