スクリプトを作成してから呼び出した後に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
お好みの効果を得る。