シェル関数と別名は子プロセスを生成しますか?それともすべてシェルプロセス内で実行されますか?
答え1
いいえ。
エイリアスは、その行をトークンに解析する前に、特定の文字列を1つ以上の単語に置き換えます。シェルのコンテキストを変更する必要はありません。
Bash マニュアルで始めるシェル機能:
シェル機能は現在シェルのコンテキストで実行され、それを解釈するための新しいプロセスは作成されません。
関数を構成するコードがbash (…)
(kshではない)のように実際に子プロセスを分岐しない限り。中括弧の代わりに(または追加で)括弧を使用して関数を定義できます。
テスト:
#!/bin/bash
func(){ echo "$BASHPID"; }
fork()( echo "$BASHPID"; )
echo "$BASHPID"
func
fork
実行時:
$ ./script
8731
8731
8753
フォーク機能を以下のように理解してください。
fork(){
( echo "BASHPID" )
}