1

私の理解では、サブシェルのような構文を使用して 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サブシェルではなく、現在のシェルに変更を加えることができるような方法でスクリプトに配置できますか?

4

1 に答える 1

6

なしでスクリプトを呼び出すとsource、サブシェルで実行され、親シェルの環境を変更する方法はありません。

シバン行を使用してスクリプトを入手できます。ソースの場合は単純に無視されます。

于 2013-10-10T20:02:59.333 に答える