shellスクリプト実行のいくつかの方法

1709 ワード

shellスクリプトを実行するには、次の方法があります。


1、相対パス方式、先にcdからスクリプトパスの下に
[root@banking tmp]# cd /tmp
[root@banking tmp]# ./ceshi.sh 
 

2、絶対パス方式
[root@banking tmp]# /tmp/ceshi.sh 
 
3、bashコマンド呼び出し
[root@banking /]# bash /tmp/ceshi.sh 
 

4、. (スペース)相対的または絶対的な方法
[root@banking /]# . /tmp/ceshi.sh 
 

いくつかの方法の違いを話します


1つ目と2つ目は何の違いもありません.両方の方法では、スクリプトに実行権限を事前に付与する必要があります.
3つ目は、スクリプトをbashの呼び出しとして処理するので、スクリプトは実行権限を持たずに実行できます.
最初の3つの方法は、現在のshellでサブshellを開いてスクリプトコンテンツを実行し、スクリプトコンテンツが終了するとサブshellが閉じ、親shellに戻ります.
4つ目は、スクリプトの内容を現在のshellで実行することであり、サブshellを単独で実行することではありません.
オープンサブシェルとオープンサブシェルの違いは、環境変数の継承関係、例えばサブシェルに設定された現在の変数が、特殊なチャネル処理をしないと親シェルは表示されないことです.
現在のshellで実行すると、設定した環境変数はすべて直接有効になります.

検証#ケンショウ#

[root@banking /]# cat /tmp/ceshi.sh 
top

1、前の3つの実行方式でのpstree表示
     ├─sshd─┬─sshd───bash───bash───top
     │      └─sshd───bash───pstree
、第4の実行形態におけるpstree表示
     ├─sshd─┬─sshd───bash───top
     │      └─sshd───bash───pstree

3、環境変数設定の継承関係及び可視関係を検証する
2つのスクリプトを作成しますshとsubshell.sh.そのうちsh subshellを呼び出す.sh
[root@banking /]# cat /tmp/father.sh 
v_ceshi='father'
#------- shell 
echo " shell "
/tmp/subshell.sh
echo " v_ceshi ${v_ceshi}"
echo ""
echo " shell "
. /tmp/subshell.sh
echo " v_ceshi ${v_ceshi}"
[root@banking /]# 
[root@banking /]# cat /tmp/subshell.sh 
v_ceshi=son
[root@banking /]# 
実行結果は
[root@banking /]# /tmp/father.sh 
 shell 
 v_ceshi father

 shell 
 v_ceshi son