--bashのログインオプションにはカラー出力はありません。

--bashのログインオプションにはカラー出力はありません。

Bashツールにカラー出力がありません。そして本当に不便です。 (ところで、bashカラーチップのような色も自分自身にあります)。

私は走ったときに/usr/bin/bash色が戻ってきたことを発見しました。 (ただし、エイリアス、パスなどのプロファイル設定はありません。)

ここで見ることができる唯一の違いは--loginロゴです。問題の原因は、bashが最初にフラグを使用して--login構成ファイルをロードすることです。

しかし、それは何ですか?

答え1

/usr/bin/bashを実行したときに色が再び表示されることを確認しました。 (ただし、エイリアス、パスなどのプロファイル設定はありません。)

明らかに、これらを設定するコマンドは実行されますいいえ- ログインシェル。

対話型ログインシェルは、他の対話型シェルとは異なる起動スクリプトを使用します。

カラー出力を設定するコマンドは、.bashrcホームディレクトリのファイルにあるか、システム全体にあります/etc/bash.bashrc。これらのファイルのコマンドは、対話型シェルに対して実行されます。いいえログインシェル。ただし、コマンドが別の起動スクリプトソースにない場合、対話型ログインシェルでは実行されません.bashrc。これらのファイルを確認する必要があります。

bashログインシェルで始まると、ホームディレクトリにある、およびの最初の/etc/profileコマンドを実行します。詳細については、実行してください。.bash_profile.bash_login.profileman bash

非対話型ログインシェルでもプロファイルファイルのコマンドが実行される可能性があり、その設定に色を付けたくない場合があります。そうするとエラーが発生する可能性があります。特に、ほとんどのデスクトップ環境はファイルから.profileコマンドを実行します。したがって、プロファイルファイルに色分けコマンドを追加する場合は、次のコマンドのみを使用できるようにすることを検討してください。インタラクティブシェル。また、一部のコマンドは他のシェルでのみ実行できbash、他のシェルでは実行できないため、そのまま残っていることを確認する必要があります(下記参照)。

シェルが対話型であることを確認する1つの方法は、PS1プロンプト変数が存在し、空でないことを確認することです。非対話型ログインシェルの場合でも、実行したいコマンドの後に、インタラクティブシェルで実行したいコマンドの前にこのコマンドをプロファイルファイルに配置できます。

[ -z "$PS1" ] && return

時々、インタラクティビティチェックは "rc"ファイルにあるかもしれません。

一部のオペレーティングシステムではDebianとUbuntuが含まれています、デフォルト.profile/etc/skel/ユーザーアカウントが作成されたときにコピーされます)ソース - つまり - からすべてのコマンドを実行します.bashrc。繰り返しますが、/etc/profileソース/etc/bash.bashrc。ただし、デフォルトのシェルを使用するすべてのオペレーティングシステムがbashこれを行うわけではありません。たぶんあなたのシステムにないかもしれません。

そのシステムにはデフォルトで次の行が.bashrcあります。/etc/bash.bashrc他のコマンドより先に。特に、シェルが異なる方法で対話していることを確認/etc/bash.bashrcしながら、その行を正確に保ちます。.bashrc

case $- in
    *i*) ;;
      *) return;;
esac

これは、対話型シェルに特別なパラメータがbashあるために機能します。私はあなたがこのようにチェックすることを好む場合に備えて主に言及します。i$-

時々「config file」から「rc」を条件付きでインポートするのは妥当です。

.bashrcたとえば、状況によっては、Debianのようにホームディレクトリに「プロファイル」ファイルを保存したい場合があります。これは実際にすべてのファイルに何があるかによって異なりますので、これを行うようにアドバイスすることはできません。しかし、DebianとUbuntuはこうします。

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi

のコマンドは.bashrc通常でのみ実行できるbashため、他のシェルで誤ってコマンドを実行しないように設定しないでください。これが上記のコードが達成するものです。.bash_profileor では and のみが使用されるため、置き換えること.bash_loginができます。しかし、. "$HOME/.bashrc"bash.bash_profile.bash_login.profileいいえ. "$HOME/.bashrc"ほとんどのデスクトップ環境に加えて、他のシェルでもコマンドを実行するため、保護されていないものがあります。bash.profile

ソースコードを作成することにした場合は、/etc/profile同様の注意を払う必要があります/etc/bash.bashrc。すべての場合に、組み込み関数を使用して別の起動スクリプトから起動スクリプトをインポートするとき.sourceおよび.からsource交換可能bash)、あるファイルが別のファイルのソースを取得する無限ループを生成しないようにする必要があります。他のAファイルはソースファイルのソースを取得します。

どうすればいいですか…

...あなたが提供した情報によれば、上記のファイルのうち、実際にはどのファイルがあり、そのファイルに何が含まれているのかわからないため、わかりません。

私が提供した説明は、あなたがどんな変更を加えるべきかを知るのに十分であると思います。しかし、あなたは実際にどのコマンドがログインシェルと非ログインシェルから来るのか/etc/bash.bashrc、または.bashrcどのコマンドをログインシェルで実行したいのかわかりません。非ログインシェル、および非ログインシェルにのみ予約したいコマンド。 (またはそれらのいくつか - 環境変数の設定など) -PATHただ実行したいかもしれません。ログインシェル。 )

したがって、これらの理由であれ他の理由であれ、より詳細な回答が必要な場合は、その情報(完全で正確なテキストを持つ各ファイルの名前)を提供するように質問を編集することをお勧めします。 (この問題を支援したい他のユーザーは間違いなくいいえこの質問を編集してください。ただし、最初に検索して解決策が見つからなかった場合は、新しい質問を投稿する必要があります。 )

関連情報