shell 內建命令 exec

2021-06-22 12:39:27 字數 918 閱讀 3244

exec 命令並不啟動新的 shell,而是用要被執行的命令替換當前的 shell 程序,並且將老程序的環境清理掉,exec 命令後的其它命令將不再執行。exec 在執行時會將當前的 shell process 關閉,然後切換到後面的命令繼續執行。

在乙個 shell 中執行 exec ls,列出當前目錄後,這個 shell 就會自己退出。因為這個 shell 程序已被替換為僅僅執行 ls 命令的乙個程序,程序執行結束後自然也就退出了。

這會影響我們的使用,為了避免這種情況,一般將 exec 命令放到乙個 shell 指令碼中,用主指令碼呼叫這個指令碼。呼叫點處可以用 bash a.sh(a.sh 包含 exec ls),這會為 a.sh 建立乙個 sub shell 去執行,當執行到 exec 時,該 sub shell 將被替換成 ls 程序。

source 命令或者「.」不會為指令碼新建 shell,而只是將指令碼包含的命令在當前 shell 執行。

修改當前檔案描述符

$ exec 3 < afile

這將使檔案描述符 3 被開啟,以便從檔案 afile 裡讀取資料。這種用法非常少見。

exec 命令對檔案描述符操作時不會替換 shell,並且操作完成後仍會繼續執行後面的命令。

exec 命令還可以作為 find 命令的乙個選項

1. 在當前目錄下(包含子目錄)查詢所有 txt 檔案,並找出含有字串 bin 的行

$ find ./ -name 「*.txt」 -exec grep 「bin」 {} \;

2. 在當前目錄下(包含子目錄)刪除所有 txt 檔案

$ find ./ -name 「*.txt」 -exec rm {} \;

-exec  後是 command 命令,命令必須以;為結束標誌,考慮到各個系統中分號會有不同的意義,所以前面加反斜槓。

{} 花括號代表 find 找到的檔名。

shell例項 十五 exec命令

1.乙個exec自身的指令碼 sleep 2 exec 0 echo this line will never echo exit 0 2.shopt允許shell在空閒時修改shell選項,經常出現在啟動檔案中。shop s cdspell 使用cd命令時,允許少量的錯誤 cd hpme 應該是 ...

shell內建命令

知識點1 什麼是shell內建命令?shell內建命令,就是由 bash 自身提供的命令,而不是檔案系統中的某個可執行檔案。內建命令與普通命令的性質是不一樣的,內建命令並不是某個外部檔案,只要在shell中就一定可以執行這個命令。知識點2 怎麼確定乙個命令是否是內建命令?使用type可以區分,例如c...

Bash內建命令exec和重定向

bash內建命令exec重定向 bash內建命令exec可以替換當前程式而不需要啟動乙個新的程序,可以改變標準輸入和輸出而不需要啟動乙個新的子程序。如果檔案用exec開啟,read命令就會把檔案指標每次指向下一行直到檔案的末尾,如果要重新從檔案開始讀取,則必須把檔案關閉再重新開啟。1 替換當前she...