~/.bashrc機能をGUIログインエントリとして実行する方法

~/.bashrc機能をGUIログインエントリとして実行する方法

私は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ソースが空でない場合のみ、つまり(デフォルトから):~/.bashrcBASH_VERSION.profile

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

Lightdm では起動スクリプトは によって実行され、/bin/shDebian ではシンボリックリンクです。/bin/dash。これは~/.profile起動時BASH_VERSIONに空であるためインポートされ~/.bashrcないことを意味します。

考えられる解決策

  1. 実行機能~/bin

  2. 別の解決策(起動時に複数の解決策が必要な場合)は、すべての機能を保存する場所を示す別のファイルを持ち、そこからファイルをインポートして~/.startup_functions そこで.profile機能を実行することです。を使用して実行するので、/bin/dash互換性を確認する必要があります。

それ以外の場合は、起動時に起動bashシェルとソースとして使用する必要がある場合は、.bashrc1つの方法がデフォルトに設定するbashことです/bin/sh。つまり、次を実行します。

$ dpkg-reconfigure dash 

そして指示に従ってください。

で関数を定義して起動時に実行するには、対話型の.bashrc場合にのみシェルがロードされることに注意してください。.profileデフォルトでは、次のテストがある場合.bashrc.bashrc

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

これは、このテストを削除するか、以前に必要な機能を定義する必要があることを意味します。とにかく私は~/bin

関連情報