Shellスクリプトを実行する4つの方法と違いの紹介

2108 ワード

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 

2、第4の実行方式でのpstree表示
 
  
├─sshd─┬─sshd───bash───top 
│      └─sshd───bash───pstree 

3、環境変数設定の継承関係と可視関係を検証する2つのスクリプトを作成し、father.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