私はDebian StretchとXfceを使っています。私の~/bin
ディレクトリには多くのスクリプトがあります。これはもちろん私のファイルです$PATH
。時には、セッションと起動>アプリケーションの自動起動を介してXfceにログインすると、そこからスクリプトが実行されます。私の~/.bashrc
ファイルにはカスタムエイリアスと関数があります。より短いコードを書くためにファイル内の関数を使用していますが、~/.bashrc
それについて完全なスクリプトを作成したくありません~/bin
。しかし、時には私のファイルの~/.bashrc
機能をGUIログインエントリとして実行したい場合があります。
でテスト機能を作成しました~/.bashrc
。その後で実行するように関数を設定しました~/.profile
。以下を実行すると、関数は正常に実行されます。 -bash -l
端末で実行 - ttyセッションにログイン
ちなみに、LightDMからグラフィカルXfce環境にログインしても実行されません。この機能は、Xfceのセッションと起動>アプリケーションの自動起動に追加されても実行されません。さらなるテストのために直接実行しました~/.profile
。 Xfceにログインしたときに実行されました。
~/.bashrc
グラフィカル環境にログインしている間は関数を実行できません。これはバグですか? GUIログイン時に機能を実行するには、設定を有効にする必要がありますか?それとも、これは私のシステムが設計された方法ですか?ありがとう
答え1
デフォルト~/.profile
ソースが空でない場合のみ、つまり(デフォルトから):~/.bashrc
BASH_VERSION
.profile
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
Lightdm では起動スクリプトは によって実行され、/bin/sh
Debian ではシンボリックリンクです。/bin/dash
。これは~/.profile
起動時BASH_VERSION
に空であるためインポートされ~/.bashrc
ないことを意味します。
考えられる解決策
実行機能
~/bin
別の解決策(起動時に複数の解決策が必要な場合)は、すべての機能を保存する場所を示す別のファイルを持ち、そこからファイルをインポートして
~/.startup_functions
そこで.profile
機能を実行することです。を使用して実行するので、/bin/dash
互換性を確認する必要があります。
それ以外の場合は、起動時に起動bash
シェルとソースとして使用する必要がある場合は、.bashrc
1つの方法がデフォルトに設定するbash
ことです/bin/sh
。つまり、次を実行します。
$ dpkg-reconfigure dash
そして指示に従ってください。
で関数を定義して起動時に実行するには、対話型の.bashrc
場合にのみシェルがロードされることに注意してください。.profile
デフォルトでは、次のテストがある場合.bashrc
.bashrc
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
これは、このテストを削除するか、以前に必要な機能を定義する必要があることを意味します。とにかく私は~/bin
。