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