linuxexec執行
⑴ linux 命令:exec
命令簡介
exec 命令用於調用並執行指定的命令。
exec 命令通常用在 Shell 腳本程序中,可以調用其他的命令。如果在當前終端中使用命令,則當指定的命令執行完畢後會立即退出終端。
-c #在空環境中執行指定的命令
-l #在傳遞給command的第零個arg的開頭放置一個破折號
-a #Shell將name作為第零個參數傳遞給command
輸出指定信息
其它總結
⑵ linux shell腳本 解釋exec
這是一個if結構
判斷 /var/log/x.log 是否存在
然後執行exec命令,將執行輸出的標准信息和錯誤信息都輸出到 /var/log/x.log 文件
⑶ 【exec】shell腳本中的 exec 命令
exec 是 bash 的內置命令
shell 的內件命令exec執行命令時,不啟用新的shell進程。
source 和 . 不啟用新的shell,在當前shell中執行,設定的局部變數在執行完命令後仍然有效。
bash 或 sh 或 shell script 執行時,另起一個子shell,其繼承父shell的環境變數,其子shelll的變數執行完後不影響父shell。
exec是用被執行的命令行替換掉當前的shell進程,且exec命令後的其他命令將不再執行。
例如在當前shell中執行 exec ls 表示執行ls這條命令來替換當前的shell ,即為執行完後會退出當前shell。
為了避免這個結果的影響,一般將exec命令放到一個shell腳本中,用主腳本調用這個腳本,調用處可以用bash xx.sh(xx.sh為存放exec命令的腳本),這樣會為xx.sh建立一個子shell去執行,當執行exec後該子腳本進程就被替換成相應的exec的命令。
其中有一個例外:當exec命令對文件描述符操作的時候,就不會替換shell,而是操作完成後還會繼續執行後面的命令!
在shell腳本中使用exec命令,根據操作的對象不同會有不同的行為
文件描述符
shell中描述符一共有12個
0 代表標准輸入
1 代表標准輸出
2 錯誤輸出
其他 3-9 都是空白描述符
# exec3>&1 4>&2 1>> bash.log 2>&1
其含義是: 復制標准輸出到3 ,錯誤輸出到 4 ,把 3 4 保存在bash.log 這個文件中。
# ./bash.sh >> bash.log 2>&1
其含義是:將bash.sh腳本執行的標准輸出和錯誤輸出追加重定向到 bash.log
如果exec 跟的是其他命令,則其他命令結束後,本shell也隨之停止
# cat test_exec.sh
###################
#!/bin/bash
#
echo "Hello mysql"
exec echo "Hello oracle"
echo "Hello sqlserver"
####################
可以看到隨著 echo " hello oracle" 這條指令運行完本 整個腳本執行完畢,後面的 echo " hello db2" 沒有執行!
Linux shell 腳本中, $@ 和$# 分別是什麼意思?
$@ 表示所有腳本參數的內容
$# 表示返回所有腳本參數的個數
示例:編寫如下shell腳本,保存為test.sh
###############
#!/bin/sh
echo "number:$#"
echo "argume:$@"
###############
執行腳本:
./test.sh first_arg second_arg
說明:給腳本提供了兩個參數,所以$#輸出的結果是2,$@代表了參數的內容!
怎麼理解shell腳本中 exec "`dirname "$0"`/node""$0" "$@" ?
$0 # 腳本自己的路徑
"`dirname "$0"`"/node # 腳本目錄下的node程序的路徑
$@ # 腳本被執行時的命令行參數
合起來就是:用腳本目錄下的node程序來解釋這個腳本本身
exec scala "$0" "$@"是什麼意思
這是bash語法。
$0 表示當前腳本的名字
$@ 表示當前腳本執行的所有參數
exec scala "$0" "$@" 表示用scala命令,帶參數,執行當前腳本
exec sh "$0 在這個文件里,exec sh $0是什麼意思?
############
#!/bin/sh
echo "Hello!"
sleep 2
execsh "$0"
#############
$0 是位置參數,表示腳本名稱
$1 表示腳本的第一個參數,依次類推直到$9
exec用於執行命令、或腳本、或外部可執行程序,會新建一個shell去執行
綜上,這里exec sh "$0" 就是執行腳本本身
所以,就是一個循環過程,每隔兩秒列印一次 Hello
#############
#!/bin/sh
echo "Hello!"
sleep 2
exec "$0"
#############