冗長パス、.bash_profileの問題

冗長パス、.bash_profileの問題

この記事を投稿した後、Stack Overflowからここに移動しました。一つの質問PyExifToolを動作させる試みについて。しかし、問題は多面的なようで、初心者としてここで助けを求めるように言われました。

本質的に、問題は私が走るという言葉を聞いたときに気づきました...

bash:~ $ type -all exiftool

返品...

exiftool is /usr/local/bin/exiftool
exiftool is /usr/local/bin/exiftool

...どこかに重複したものがあることがわかりました。

それから走った…

bash:~ $ echo $PATH

どんなリターン...

/Library/Frameworks/Python.framework/Versions/3.8/bin:/usr/local/fsl/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin~/.bash_profile

...重複する項目が含まれており、次に終了しないでください。.bash_profile

これで、端末で以下を使用してクリーニングできます。

bash:~ $ PATH=$(echo $PATH | awk -v RS=: -v ORS=: '!($0 in a) {a[$0]; print}')

上記は私が得たスニペットです。Linuxマガジンこれは「ほとんど動作」する必要がありますが、「動作する必要がある」コードは私には役に立たないようです。 「ほとんど動作する」コードを使用すると、次の結果が表示されます。

/Library/Frameworks/Python.framework/Versions/3.8/bin:/usr/local/fsl/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin~/.bash_profile :

私は完全な初心者ですが、終わってはいけないと思いますが、まだ存在しているよう :です.bash_profile。ただし、新しいターミナルウィンドウを開くとリセットされますが、重複エントリを削除するように見えるため、これは回避策にすぎません。

私のbash設定ファイルは次のとおりです。

export PATH=/usr/local/bin:$PATH~/.bash_profile

# Setting PATH for Python 3.6
# The original version is saved in .bash_profile.pysave
#PATH="/Library/Frameworks/Python.framework/Versions/3.6/bin:${PATH}"
#export PATH

# Setting PATH for Python 2.7
# The original version is saved in .bash_profile.pysave
#PATH="/Library/Frameworks/Python.framework/Versions/2.7/bin:${PATH}"
#export PATH


# FSL Setup
FSLDIR=/usr/local/fsl
PATH=${FSLDIR}/bin:${PATH}
export FSLDIR PATH
. ${FSLDIR}/etc/fslconf/fsl.sh


# Setting PATH for Python 3.8
# The original version is saved in .bash_profile.pysave
PATH="/Library/Frameworks/Python.framework/Versions/3.8/bin:${PATH}"
export PATH

これが関連しているかどうかはわかりませんが、HotbarでPythonを起動して実行すると...

>>> print(os.environ['PATH'])

それは印刷する

/usr/bin:/bin:/usr/sbin:/sbin

そしてそれを使用してbash端末で実行すると、IDLE3次のものが返されます。

/Library/Frameworks/Python.framework/Versions/3.8/bin:/usr/local/fsl/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin~/.bash_profile

周辺情報と実験:

私の考えでは、FSLをインストールするときに何かを台無しにしたかもしれませんが.bash_profile、今は基本的なコーディング技術を学び、開発しようとすると詰まっています。たぶんこれは手動エラーであるかもしれませんし、ホームブレンドやXcodeに関連しているかもしれません。

結末を削除することもできますが.bash_profile、すでに十分に被害を受けているため、インターネットフォーラムで触れる意向がないほど難しい問題を直接解決したくはありません。

これは次の点に従う必要があります。Linux MagazineのMitch Frazier。明らかに、これはそれに対する反省やこの記事の反省ではなく、むしろ私の制限された理解に対する反省です。

bash:~ $ export PATH=/Library/Frameworks/Python.framework/Versions/3.8/bin:/usr/local/fsl/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin~/.bash_profile
bash:~ $ echo -n $PATH | awk -v RS=: '!($0 in a) {a[$0]; printf("%s%s", length(a) > 1 ? ":" : "", $0)}'

これが戻ってきます...

/Library/Frameworks/Python.framework/Versions/3.8/bin:/usr/local/fsl/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin~/.bash_profileUser's-MBP:~ username$

私も次のことを試しました。ペパ65)...

bash:~ $ PATH=$(n= IFS=':'; for e in $PATH; do [[ :$n == *:$e:* ]] || n+=$e:; done; echo "${n:0: -1}")

これが戻ってきます...

-bash:  -1: substring expression < 0

echo $PATH以下を使用して変更を見つけようとするとき

空白行が表示されます。

私はこれが知的に刺激的ではないことを知っているので、助けてくれてありがとう。

編集1:

.bash_profile最初の行の終わりを削除しようとした無実な試みのため、変更されずに出力からその行が消えませんでした.bash_profileecho $PATH

ベストアンサー1

これは単純化され、修正され、.bash_profileあなたの構成に適していることを願っています。

~/.bash_profile元の正しい行に誤って追加された問題のある行が最初にあります。ただし、予期し、診断の結果、システム提供のデフォルトディレクトリにすでに存在するディレクトリが追加されていることがわかったため、行全体を削除しましたPATH

1回以上必要ない場合がありますexport PATH。残りのインスタンスを安全に削除することもできます。export変数を表示して次のように表示することを意味します。環境子プロセスに表示される変数です。これが完了すると、値が存在していてもサブプロセスは変数の現在の値にアクセスできますexport。システム全体のシェル構成がすでにPATH変数に対してこれを実行している可能性が高くなります(そうしないと、期待どおりに機能しません)。

注釈付き部分をすべて削除しました。もちろん、その部分を取り戻してコメントを解除することもできます。

# FSL Setup
FSLDIR=/usr/local/fsl
PATH=${FSLDIR}/bin:${PATH}
export FSLDIR PATH
. ${FSLDIR}/etc/fslconf/fsl.sh

# Setting PATH for Python 3.8
# The original version is saved in .bash_profile.pysave
PATH="/Library/Frameworks/Python.framework/Versions/3.8/bin:${PATH}"

このファイルは新しいシェルを起動すると読み込まれますが、正確なタイミングはオペレーティングシステムベンダーがBashを構成した方法によって異なります。以前の構成が現在の構成を妨げないようにするには、再始動するためにログアウトして再ログインする必要があるのか​​、単に新しいシェルまたは新しい端末セッションを開始して再始動できるかを決定する必要があります。再起動。

.bash_profile.pysaveおそらく、維持したい有用なコンテンツが含まれていることを確認することもできます。ただし、最後の行セットを除くと、現在のバージョンとほぼ同じになると予想されます。

おすすめ記事