web-dev-qa-db-ja.com

同じプログラムでGUIとコマンドラインから読み取れるようにパスを設定するにはどうすればよいですか?

Texliveをインストールし、GUIまたはコマンドラインからemacsを起動したときにEmacs AucTeXが読み取れるように、環境変数として追加します。これまでのところ、emacsは~/.profileからのみファイルを読み取ると読みました。

したがって、私の計画は、.profileのパスにtexliveを追加して、emacs GUIがそれを読み取れるようにし、~/profileから.bashrcを取得して、ログインしていないインタラクティブな内部で開始されるemacsを取得することですGNOMEターミナルでパスを確認します。

注:ホームディレクトリに.profileファイルはなく、/etcディレクトリにのみあります。そのファイルには触れたくないのですが、自宅には.bash_profileがありますディレクトリ。ただし、.bash_profileは、使用していないコンソールモード、つまりコンソールモードでのみ実行されることを読みました。

私の計画は、ホームディレクトリに.profileファイルを作成し、次のことを行うことです。

ステップ1:~/.profileを作成します

ステップ2:.profileのパスにtexlive環境変数を追加します

export PATH=/usr/local/texlive/2018/bin/x86_64-linux:$PATH
export MANPATH=/usr/local/texlive/2018/texmf-dist/doc/man:$MANPATH
export INFOPATH=/usr/local/texlive/2018/texmf-dist/doc/info:$INFOPATH

ステップ3:.profileから.bashrcを取得します

#Adding this at the bottom or start of .bashrc to source .profile when the terminal is opened.

if [-s ~/.profile]; then;
    source ~/.profile;
fi

無限ループを引き起こすリスクがあるため、.profileから.bashrcを調達することに多くの懸念があることを知っています。ただし、.profileファイルを最初から作成しているので、.bashrcを参照するコードが含まれないため、これは問題になりません。

私の質問:

  1. 私の計画をどう思いますか?
  2. うまくいくと思いますか?
  3. それを改善する方法や他の選択肢についての提案はありますか

追加情報:My .bashrcには、~/etc/bashrcとAnacondaによって自動的に追加された1つの環境変数をソースするコードのみが含まれます:export PATH="/home/Fedora_User/Anaconda3/bin:$PATH"

Gnome-terminalは対話型ログインシェルとして実行できることは知っていますが、これを行ったことはなく、ターミナルセッションのパフォーマンスに影響するかどうかはわかりません。

2
MyWrathAcademia

まず、~/.profileを読み取りたい場合は、~/.bash_profileを削除する必要があります。削除しないと、~/.profileはBashによって無視されます。

あなたは実際にこれを少し複雑にしています。 PATHは/etc/environmentで設定されます。常にexportedされているため、再度エクスポートする必要はありません。

~/.profileでPATHを変更すると、ログインシェル、インタラクティブ、またはその他のすべてのシェルに継承されます。

~/.profileでエクスポートされた他の変数も環境に渡され、すべてのシェルで使用可能になります。 ~/.profileは、セッションにログインするときに1回読み取られ、エクスポートされた変数はエクスポートされたままになります。

~/.profile~/.bashrcを調達するのは悪い考えです。 ~/.profile~/.bashrcをソースするため、無限ループになります。 ~/.profile~/.bashrcをソースとしていない場合でも、~/.bashrc~/.profileソースまたは他のファイルに割り当てるのは悪い考えです

PATH=$PATH:/some/other/place

インタラクティブシェルが別のインタラクティブシェルを起動するたびにPATHが拡張されるため... PATHが

/original/path:/some/other/place:/some/other/place:/some/other/place

等.

MANPATHの割り当てに$MANPATHを含める必要はありませんが、先頭にコロンを付ける必要があります。 この質問とその回答 をご覧ください。デフォルトでは、MANPATHは未設定であり、正しいパスは動的に決定されます(何らかの方法で理解できません)。したがって、既存のMANPATHを含めても何も起こりません。パスが動的に決定されるのを防ぐために、コロンでMANPATH割り当てを開始する必要がある場合があります。私の知る限り、INFOPATHについても同じことが言えます

したがって、私はお勧めします:

~/.bash_profileの名前を変更~/.profile

行を追加します。

PATH="$PATH:/usr/local/texlive/2018/bin/x86_64-linux"
export MANPATH=":/usr/local/texlive/2018/texmf-dist/doc/man"
export INFOPATH=":/usr/local/texlive/2018/texmf-dist/doc/info"

先頭に追加するのではなく、PATHに追加したメモ。必要に応じて、先頭に追加する(先頭ではなく末尾に$PATHを置く)ことができます。パスルックアップで最初に見つかった実行可能ファイルが実行されるため、異なるPATHの場所にある2つのプログラムの名前が同じである場合、PATHで最初に来るディレクトリ(左側)のプログラムが実行されます。

~/.bashrcには何も追加しないでください。変更された環境変数、または~/.profileでエクスポートされた新しい変数は、すべてのシェルで使用でき、他の場所で追加設定する必要はありません。

また、/etc/bash.bashrcはすべてのインタラクティブシェルから最初にソースされているため、~/.bashrc/etc/bash.bashrcから取得しないでください*。また、~/.bashrcを使用して後続の調整を行います。

*例外-/etc/bash/bashrcは、信頼できないメソッドを使用してシェルが対話型であることを確認します-PS1が設定されていることを確認します。 PS1の設定を解除してシェルを起動すると、シェルが対話型であっても、/etc/bash.bashrcが取得されません。もう1つの例外は、シェルが--norcで開始された場合ですが、それはより明白です。

3
Zanna