.bashrc "exit"で呼び出されたスクリプトはログインをブロックします。

.bashrc "exit"で呼び出されたスクリプトはログインをブロックします。

スクリプトを作成してから呼び出した後にrootとしてログインできないことに気づきました~/.bashrc

~/.bashrc:

#... do stuff then run my script
source ~/myscript.sh

~/myscript.sh:

#!/bin/bash
if [myConditional]; then
  exit
fi
# otherwise do stuff

私が望むのは、rootとしてログインするとmyscript.shが実行され、myConditionalがtrueの場合、myscript.shは追加のコマンドの実行を停止しますが、.bashrcに戻り、ユーザーは通常どおりログインし続けることです。根。ところで代わりにexitログインが全くできません!ただログインプロンプトに戻ります。

これ以外に使用する必要がある他のコマンドはありますかexit?明らかにif宣言elseして削除することで説明を拡張できますが、exit教育目的でより適切なアプローチがあるかどうかを知りたいです。 (部分的に深く入れ子になったドアを避けたいからですif。かなり大きなスクリプトかもしれません。)

答え1

source filename.sh(または. filename.sh)以下を実行しますfilename.sh 現在の通訳者から(本質的には当時の内容をコピーしたのと同じです。)したがって、exit通訳は終了します。

スクリプトを別のプログラムとして実行したい場合は使用しないでくださいsource~/myscript.shまず、を使用して実行可能にするchmod +x ~/myscript.shか、必要に応じて実行しますbash ~/myscript.sh。これにより、システム内の他のプログラムと同様に、スクリプトを実行するために新しいシェルが起動します。

一方、スクリプトが本当に必要な場合(たとえば、環境変数を設定するため)、それを実行しているシェルにsource影響を与えずに残りのファイルの実行を停止できます。.bashrc使用return:

return.()組み込み関数を使用してsource実行されたスクリプトの実行を終了するためにも使用できます。nまたは、スクリプト内で実行された最後のコマンドの終了状態をスクリプトの終了状態として使用します。

この場合、myscript.shファイルには次のものが含まれます。

if [[ condition ]]
then
    return 0
fi

お好みの効果を得る。

関連情報