このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

Linuxコマンド演習35

以下のコマンドの演習を行います。

  • bashコマンドでの実行とsourceコマンドでの実行の違い

実際にコマンド操作を行いながら、Linuxの操作に慣れていきましょう。

演習01:シェル変数を設定します。

・シェル変数を2つ設定します。

$ name1="taro"
$ name2="jiro"
演習02:シェルスクリプト作成します。

・「shellscript.sh」を作成します。

「vi shellscript.sh」と入力します。

・viエディタで「i」キーを押して、挿入モードにして下記のスクリプト内容をコピーして貼り付けて保存します。

コピーアンドペーストするには、「Ctrl」+「Shift」+「v」キーを同時押しします。

 viエディタで保存して終了するには、「Esc」キーを押してコマンドモードにして「:wq」と入力します。

#!/bin/bash

echo $name1
name2="hanako"
演習03:bashコマンドで実行する。

 bashコマンドでの実行は、新しいサブシェル内でシェルスクリプトが実行され、シェルスクリプト内での変数の変更が実行元のシェルに影響を与えません。

・bashコマンドでシェルスクリプトを実行します。

$ bash shellscript.sh
     # シェルスクリプト内でname1を参照できていない
$ echo $name2
jiro   # name2の内容は変更されない

 シェルスクリプト内の echoコマンドで変数name1 の内容が出力されていません。これは、変数name1 がシェルスクリプト内から参照できていないことを意味します。また、シェルスクリプト内で設定した変数name2 の値が、実行元のシェルに反映されていません。

演習04:souceコマンドで実行する。

 sourceコマンドでの実行は、現在のシェルセッションでシェルスクリプトが実行されるため、シェルスクリプト内での変数の変更が呼び出し元のシェルにも影響を与えます。

・sourceコマンドでシェルスクリプトを実行します。

$ source shellscript.sh
taro
$ echo $name2
hanako

 シェルスクリプト内の echoコマンドで変数name1 の内容が出力されています。これは、変数name1 がシェルスクリプト内から参照できていることを意味します。また、シェルスクリプト内で設定した変数name2の値が、呼び出し元のシェルに反映されています。

演習終了時の作業:ファイルの削除

・この演習で作成したファイルを削除します。

$ rm shellscript.sh

この演習のまとめ

bashコマンドでの実行とsourceコマンドでの実行の違い

・bashコマンドでの実行

 新しいサブシェル内でシェルスクリプトが実行され、シェルスクリプト内での変数の変更が呼び出し元のシェルには影響を与えない。

・sourceコマンドでの実行

 現在のシェルセッションでシェルスクリプトが実行されるため、シェルスクリプト内での変数の変更が呼び出し元のシェルにも影響を与える。