リモート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
スクリプトが次の設定しかしないことがわかっている場合両方
- 新しいシェル関数ではなく環境変数
- 絶対に変更しないでください(たとえば、更新できるアイテムの時間、日付、バージョン番号に依存しません)。
その後、スクリプトが実行する操作を単に「エミュレートする」ことができます。いくつかの環境変数が設定されます。
それでは、スクリプトの実行前後の環境変数をどのように比較しますか?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
。
コマンドが1つ以上の場合は、おそらく特定cd
のフォルダに入ったときに環境を自動的に有効にするようなものを探しています。
direnv
ほとんどそうすることができます。もちろん、スクリプトの実行に時間がかかる問題は解決されません。ただし、同じシェルの後は一度ではなく、特定のディレクトリに入ると一度だけ実行されます。
注:これは3つの個別の答えの1つです。分離は意図的なものです。