Bashツールにカラー出力がありません。そして本当に不便です。 (ところで、bash
カラーチップのような色も自分自身にあります)。
私は走ったときに/usr/bin/bash
色が戻ってきたことを発見しました。 (ただし、エイリアス、パスなどのプロファイル設定はありません。)
ここで見ることができる唯一の違いは--login
ロゴです。問題の原因は、bashが最初にフラグを使用して--login
構成ファイルをロードすることです。
しかし、それは何ですか?
答え1
/usr/bin/bashを実行したときに色が再び表示されることを確認しました。 (ただし、エイリアス、パスなどのプロファイル設定はありません。)
明らかに、これらを設定するコマンドは実行されますいいえ- ログインシェル。
対話型ログインシェルは、他の対話型シェルとは異なる起動スクリプトを使用します。
カラー出力を設定するコマンドは、.bashrc
ホームディレクトリのファイルにあるか、システム全体にあります/etc/bash.bashrc
。これらのファイルのコマンドは、対話型シェルに対して実行されます。いいえログインシェル。ただし、コマンドが別の起動スクリプトソースにない場合、対話型ログインシェルでは実行されません.bashrc
。これらのファイルを確認する必要があります。
bash
ログインシェルで始まると、ホームディレクトリにある、およびの最初の/etc/profile
コマンドを実行します。詳細については、実行してください。.bash_profile
.bash_login
.profile
man 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_profile
or では 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
ただ実行したいかもしれません。ログインシェル。 )
したがって、これらの理由であれ他の理由であれ、より詳細な回答が必要な場合は、その情報(完全で正確なテキストを持つ各ファイルの名前)を提供するように質問を編集することをお勧めします。 (この問題を支援したい他のユーザーは間違いなくいいえこの質問を編集してください。ただし、最初に検索して解決策が見つからなかった場合は、新しい質問を投稿する必要があります。 )