私の理解では、サブシェルのような構文を使用して BASH シェル内でスクリプトを実行する$ ./myscript.sh
と、そのシェルでコードが実行され、STDOUT および STDERR 出力がシェルに出力され、シェルから STDIN が取得されます。これが、スクリプトが対話型である方法です。
ファイル「myscript」の一番上の行は#!/bin/bash
、スクリプト ファイル内の構文を実行するために使用されるインタープリターを示しています。
この構文を使用するsource myscript.sh
と、スクリプト内のコードはサブシェルではなく現在の環境に「引き込まれ」、そこで実行されます。次のコードをスクリプトで実行して$ ./myscript.sh
、現在のシェルに影響を与えることはできません。
#!/bin/bash
PS1='`
if [ $? -eq 0 ];
then echo -n "\[\033[00;35m\]\u\[\033[01;32m\]@\[\033[00;35m\]\h\[\033[00;32m\](\[\033[01;35m\]\W\[\033[01;32m\])\[\033[00;32m\]\$";
else echo -n "\[\033[00;35m\]\u\[\033[01;31m\]@\[\033[00;35m\]\h\[\033[01;31m\](\[\033[35m\]\W\[\033[31m\])\[\033[00;31m\]\$";
fi`\[\033[0m\]'
を削除してこのスクリプト#!/bin/bash
を使用するとsource
、コマンド プロンプトが変更されます。$ ./myscript.sh
サブシェルではなく、現在のシェルに変更を加えることができるような方法でスクリプトに配置できますか?