FC2ブログ
サブシェルとカレントシェル
注意)覚書ですので、読みやすさは考慮しておりません。


vi で以下を記述 a.sh と名づける
export HOGE="hogehoge"


コマンドプロンプトで以下を実施
$ bash a.sh

$ echo $HOGE

$ . a.sh

$ echo $HOGE
hogehoge

. はカレントシェルで実行のコマンド

vi で以下を記述 b.sh と名づける
#!/bin/sh

if [ -f $HOME/a ]; then
exec ls a;
else
echo not found;
fi


$ bash b.sh

だと、黒い窓は閉じないが、
$ . b.sh

だと、黒い窓は閉じる。

exec は、Cのシステムコールのexecシリーズといっしょ。
現在のプロセスと置き換える。
ようするに、bashがPID 1000で動いていて
exec を実行すると ls がPID 1000として動く。


サブシェルとカレントシェルの話だったのだが、途中 sh系の話になる。
「sh系のスクリプトは、ifと[の前後には必ずスペース」
とのこと。さらに、
「[と]はセットのコマンドです。[とtestと言うコマンドは実態はいっしょ」
とのこと。さらに、
if [ -f $HOME/a ]
then
exec hogehoge

は、
if [ -f $HOME/a ]; then
exec hogehoge

と書いても同じことらしい。 ls; ls とかのコマンドを連続して書くときの;と同じ感覚のようだ。 ];のところは。
スポンサーサイト



コメントを投稿する
Name:
URL:
Comment:

秘密:管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL
この記事にトラックバックする(FC2ブログユーザー)
ブログ検索

プロフィール

ビンゴ中西
Perlが好きである。
プログラミング言語のほとんどは独学。独学の過程で多くのプログラム仲間にも色々教わりました。

FC2カウンター

カレンダー

04 | 2021/05 | 06
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -

ブロとも申請フォーム

この人とブロともになる

| ホーム |