exec的多種運用

2021-08-11 09:07:00 字數 2033 閱讀 8913

本文作者筆記體系歸檔:

(1)fork

fork是linux的系統呼叫,用來建立子程序(child process)。子程序是父程序(parent process)的乙個副本,從父程序那裡獲得一定的資源分配以及繼承父程序的環境。子程序與父程序唯一不同的地方在於pid(process id)。

環境變數(傳給子程序的變數,遺傳性是本地變數和環境變數的根本區別)只能單向從父程序傳給子程序。不管子程序的環境變數如何變化,都不會影響父程序的環境變數。

(2)source

使用 source 方式執行 script 時, 就是讓 在當前程序中執行引數檔案中的各個命令, 而不是另起子程序(sub-shell)。 由此可見source執行的時候是當前shell環境下執行,執行完成後把結果返回給當前shell。

(3)exec

a)exec命令用於呼叫並執行指令的命令。exec命令通常用在shell指令碼程式中,可以呼叫其他的命令。在當前終端中使用命令,則當指定的命令執行完畢後會立即退出終端。

在終端中

[root@izgf10elo5bco4z ~]# su xingcheng

[xingcheng@izgf10elo5bco4z root]$ exec ls

[root@izgf10elo5bco4z ~]#

在shell指令碼中

[root@izgf10elo5bco4z ~]# cat test.sh

#!/bin/bash

a=1echo

$aexec

echo

'1'a=2

echo

$a[root@izgf10elo5bco4z ~]# sh -x test.sh

+ a=1

+ echo11

+ exec

echo

11

b)使用 exec 方式執行script時, 它和 source 一樣, 也是讓 script 在當前程序中執行, 但是 process 內的原**剩下部分將被終止. 同樣, process 內的環境隨script 改變而改變.不過,要注意乙個例外,當exec命令來對檔案描述符操作的時候,就不會替換shell,而且操作完成後,還會繼續執行接下來的命令。

例如

[root@izgf10elo5bco4z ~]# cat test.sh && sh  test.sh

#!/bin/bash

a=1exec > text.log

lspwd

echo

"終端未退出"

exec > /dev/pts/0

ls[root@izgf10elo5bco4z ~]# cat text.log

1.sh

2.sh

2.txt

process.sh

tempfd1

test.sh

text.log

/root

終端未退出

exec命令

作用exec 3<>hello.txt

以讀寫方式繫結檔案描述符」3」到hello.txt

exec 3< hello.txt

以「唯讀方式」繫結檔案描述符」3」到hello.txt

exec 3>hello.txt

以「只寫方式」繫結檔案描述符」3」到hello.txt

exec 3>&-

關閉檔案描述符fd3的寫,同時也不能讀了

exec 3<&-

關閉檔案描述符fd3的讀,同時也不能寫了

exec >file

將file中的內容作為標準寫出

exec 5<&4

建立fd4的拷貝fd5

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

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

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

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

exec函式 python 使用exec的疑惑

簡介 exec 執行儲存在字串或檔案中的python語句,相比於 eval,exec可以執行更複雜的 python exec函式功能強大,也很容易上手,在做未知變數定義時很好用。例如 使用exec函式可以將其中的字串語句定義為變數 with open data.txt r as f for line...

愛馳汽車運用多種手段鑄造智慧型工廠

愛馳汽車作為一家致力於智慧型製造 智慧型產品和運營服務加速汽車產業進化的企業,以工業4.0 標準自建具備整車資質的數位化 智慧型化 柔性化超級智慧型工廠,引領低能耗 自動化的綠色產業鏈發展潮流。在工業生產領域,愛馳汽車超級智慧型工廠以領先的智慧型製造 智慧型物流,打造低能耗 自動化的綠色生產鏈。智慧...

exec 命令的用法

shell的內建命令exec將並不啟動新的shell,而是用要被執行命令替換當前的shell程序,並且將老程序的環境清理掉,而且exec命令後的其它命令將不再執行。因此,如果你在乙個shell裡面,執行exec ls那麼,當列出了當前目錄後,這個shell就自己退出了,因為這個shell程序已被替換...