.bashrcファイルで「対話型で実行しない限り何もしないでください」とはどういう意味ですか?

.bashrcファイルで「対話型で実行しない限り何もしないでください」とはどういう意味ですか?

私の.bashrcの上部には次のコマンドが含まれています。

# If not running interactively, don't do anything
case $- in
   *i*) ;;
    *) return;;
esac

私の.bashrcテンプレートはUbuntuで作成されたので、私の.bash.rcに追加したことはありません。

私が知っている限り、このコマンドはリモートシェル(rsh)またはセキュリティシェル(ssh)から.bashrcファイルをインポートするのを防ぐためです。 .bashrcに次の内容がある場合、alias rm='rename'上記のエイリアスはリモートシェルでは機能しません。ただし、対応するコマンドがない場合、エイリアスは機能します。リモートシェルに「名前変更」がインストールされていないと、rm実行時にエラーが発生します。したがって、最終的な目標は、.bashrcファイルのソースをブロックして、予期しない動作を防ぐことです。

だからこれが私が混乱しているところです。このコマンドを完全に削除しましたが、リモートシェルには違いはありません。テストする前に.bashrcをインポートしてシステムを再起動したことがありましたが、ssh(この場合は2つのサーバー)で予期しない動作がまったく見えません。

私は.bashrcにecho関数を生成し、サーバーから呼び出すなどの簡単なテストを試しました。私が得るすべてはコマンドが見つかりません:foo

私がすることができる唯一の結論は、私のサーバーの1つには独自の.bashrcがあり、他のサーバーには.zshrcがあるため、私のローカルの.bashrcよりも優先されるため、ソースが提供されないことです。それでは、なぜ上記のコマンドが必要ですか?上記のコマンドは廃止され、2022年にはもう有効ではありませんか?それとも機能しますが、.bashrc、.zshrc、または同様のファイルを持たないサーバーでsshを使用しているシステム管理者にのみ適用されます。

要約:すでに独自の.bashrcファイルまたは.zshrcファイルを持っている私のサーバーにsshを介してのみ接続している場合は、それを.bashrcファイルに追加する必要がありますか?

ベストアンサー1

一つインタラクティブシェルはプロンプトを表示してコマンドを入力できる場所です。

非対話型シェルはスクリプトを開始する場所です。

読む6.2 Bash 起動ファイルシェルの起動時にどのファイルが検索されるかについては、マニュアルを参照してください。

一般的に何かを入れます。

  • ~/.profileまたは、~/.bash_profileログイン時に発生したい(環境変数の設定、SSHエージェントの起動、対話型シェル、および実行中の他のプログラムに影響を与えるタスク)。
  • ~/.bashrc対話型使用のためにのみ設定したいこと(エイリアス、機能、コマンド入力を簡単にすること)

これが違いです

$ echo "$-"
himBCHs

そしてスクリプトを実行してください

$ cat > myscript.sh
#!/usr/bin/env bash
echo "$-"

$ bash ./myscript.sh
hB

~/.bashrcスクリプトに必要なものがあればできますが、source ~/.bashrc質問のケースの説明が失敗する可能性があります。より良いオプションは、bashに対話型シェルのように動作するように指示することです。

$ bash -i ./myscript.sh
himBCH

おすすめ記事