自分のアカウントにログインしたときに、ローカルにインストールされたソフトウェアを自動的に取得するにはどうすればよいですか?

自分のアカウントにログインしたときに、ローカルにインストールされたソフトウェアを自動的に取得するにはどうすればよいですか?

新しいソフトウェアを手動でビルドしてインストールしました(リモートのgitリポジトリから)。それを使用するたびに、次のようなコマンドを実行します。

. /path/to/setup_software.sh

しかし、手動で行うのではなく、アカウントにログインするたびに自動的に行われるようにしたいのです。.bashrcカーネルを開くたびにセットアップ ファイルが読み込まれるように、上記のコマンドをファイル内に記述してみました。その後はすべて正常に動作し、満足しています。唯一の小さな (本当に小さな) 問題は、カーネルを開いた直後にログ メッセージがいくつか出力され、全体の読み込みに時間がかかることです (これは気に入りません :D)。とにかく、インストール フォルダーをセットアップ ファイルを自動的に実行する場所に移動するなど、もっとすっきりした解決策があるのではないかと思います。ご助力いただければ幸いです。

答え1

source(または.)コマンドをスタートアップファイル以外の場所に置いても.bashrc、実行時間は短縮されません。スタートアップをに置くこともできます/etc/profile.dが、遅延は同じです。ログメッセージについては、これを試してみてください。.bashrc

. /path/to/setup_software.sh >/dev/null 2>&1

ログ メッセージは表示されません。また、発生したエラーも表示されません。

答え2

これを に入れるだけで済みます~/.bash_profile。これは、シェルがログイン時に実行するものだからです。問題: シェルにログインしていない場合 (たとえば、グラフィカル インターフェイスを使用してログオンしている場合)、これは実行されません。

注: これは 3 つの個別の回答のうちの 1 つです。別々であることが意図されています。

答え3

スクリプトが、両方

  1. 環境変数、新しいシェル関数ではなく、
  2. 決して変更しない(例えば、時間や日付、更新する可能性のあるもののバージョン番号に依存しない)

すると、スクリプトが行うことを単純に「エミュレート」できます。つまり、いくつかの環境変数が設定されます。

では、スクリプトを実行する前と実行後の環境変数をどのように比較するのでしょうか?diffテキスト ファイルの比較に非常に便利です。

環境変数を指定するには、 を使用できますset(posix オプションを設定した後)。

また、サブシェルで実行した<(...)結果を保持するための一時ファイルを作成するためにも使用できます。これらをすべて組み合わせます。set

$ diff <(set -o posix; set) <(export FOO=BAR; set -o posix; set)

教えてくれます

33a34
> FOO=BAR

FOO=BARこれは、「最初の出力にはない行が 2 番目の出力に存在する」と解釈されます。

走れる

$ diff <(set -o posix; set) <(. /path/to/setup_software.sh; set -o posix; set)

セットアップ スクリプトが環境でどのような変更を行ったかを把握します。それを解釈するには人間の脳が必要です。無関係なものもあれば、スクリプトが実際にシステムに対して行う影響のあるものもあるでしょう。

その後、変更されたすべての変数を に追加できます~/.bashrc。例:

export FOO=BAR

注: これは 3 つの個別の回答のうちの 1 つです。別々であることが意図されています。

答え4

これは、やりすぎの危険があるように思えます。スクリプトをソースとしてソフトウェアを起動するエイリアスを追加するだけで済みます。

alias startit=". /path/to/setup_software.sh; run_software"

そして に電話してくださいstartit

cdコマンドが 1 つだけではない場合は、特定のフォルダーに入ったときに環境を自動的にアクティブ化するなどの機能を探している可能性があります。

direnvほぼそれが可能です。もちろん、スクリプトのソース取得に時間がかかるという問題は解決されませんが、特定のディレクトリに入ったときに 1 回だけ実行され、同じシェルではそれ以降は実行されません。

注: これは 3 つの個別の回答のうちの 1 つです。別々であることが意図されています。

関連情報