Shellスクリプトを実行する4つの方法と違いの紹介
2108 ワード
shellスクリプトを実行するには、次の方法があります.
1、相対パス方式、先にcdからスクリプトパスの下に
スクリプトの実行に成功しました
2、絶対パス方式
スクリプトの実行に成功しました
3、bashコマンド呼び出し
スクリプトの実行に成功しました
4、. (スペース)相対的または絶対的な方法
いくつかの方法の違いを話します
1つ目と2つ目は何の違いもありません.両方の方法では、スクリプトに実行権限を事前に付与する必要があります.
3つ目は、スクリプトをbashの呼び出しとして処理するので、スクリプトは実行権限を持たずに実行できます.
最初の3つの方法は、現在のshellでサブshellを開いてスクリプトコンテンツを実行し、スクリプトコンテンツが終了するとサブshellが閉じ、親shellに戻ります.
4つ目は、スクリプトの内容を現在のshellで実行することであり、サブshellを単独で実行することではありません.
オープンサブシェルとオープンサブシェルの違いは、環境変数の継承関係、例えばサブシェルに設定された現在の変数が、特殊なチャネル処理をしないと親シェルは表示されないことです.
現在のshellで実行すると、設定した環境変数はすべて直接有効になります.
検証:
1、前の3つの実行方式でのpstree表示
2、第4の実行方式でのpstree表示
3、環境変数設定の継承関係と可視関係を検証する2つのスクリプトを作成し、father.shとsubshell.sh.そのうちsh subshellを呼び出す.sh
実行結果は
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