アカウントにログインしたときにソフトウェアがローカルに自動的にインストールされるようにするにはどうすればよいですか。

アカウントにログインしたときにソフトウェアがローカルに自動的にインストールされるようにするにはどうすればよいですか。

リモート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テキストファイルを比較するのにとても良いです。

setposixオプションを設定した後、提供された環境変数を使用できます。

これを使用して、サブシェルから実行結果を保存する一時ファイルを作成できます<(...)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

コマンドが1つ以上の場合は、おそらく特定cdのフォルダに入ったときに環境を自動的に有効にするようなものを探しています。

direnvほとんどそうすることができます。もちろん、スクリプトの実行に時間がかかる問題は解決されません。ただし、同じシェルの後は一度ではなく、特定のディレクトリに入ると一度だけ実行されます。

注:これは3つの個別の答えの1つです。分離は意図的なものです。

関連情報