
.bashrc
私は、環境を自動的に強制ロードするためにコードを添付するいくつかのインストーラの望ましくない動作を排除する方法を探しています。この問題は主にCondaで数回発生し、場合によってはユーザーのアカウントが破損してログインできなくなりました。
次のように.bashrcの末尾に閉じられていないドキュメントを追加してみました。
# .bashrc
#...
: <<'__END__'
動作しますが、解析エラーが発生し、迷惑な警告が発生します。
.bashrcを読み取り専用にするのではなく、これを行うためのきちんとした方法は何ですか?
答え1
.bashrc
終わったら
return 0
ヘビーヒーター後に追加された行はすべて無視してください。、.bashrc
ソーススクリプトのように扱われるからです。
return
.
()組み込み関数を使用してsource
実行されたスクリプトの実行を終了するためにも使用できます。Nまたは、スクリプト内で実行された最後のコマンドの終了状態をスクリプトの終了状態として使用します。
(exit 0
シェルが終了しますが、これは望むものではありません。)
答え2
Stephenのヒントは効果がありますが、ここで基本的な問題は.bashrc
。意図的にサプライチェーンの損傷やインサイダーの脅威による露骨なマルウェアにコールバックスパイウェアを送信しました。
正しい解決策は、どの権限でも「インストールプログラム」を実行しないことです。代わりに、使い捨てコンテナまたはユーザーアカウントで実行してから、「ステージング」環境から必要なファイルのみを使用したい環境にコピーできます。私は私が書いたツールを使って次のことをします。ウサンドは新しいユーザーを作成し、名前空間をマウントするために使用され、ネットワークunshare
アクセスをブロックし、現在のディレクトリ外のファイルとその下のすべてのエントリへの書き込みアクセスをブロックします。まだあまり柔軟ではありませんが、同じ概念の多くを適用して、特定のワークフローに適したタスクを実行できます。
答え3
を使用すると、追加のreturn
コンテンツが実行されるのを防ぎますが、時間の経過とともにファイルがすべてのゴミでいっぱいになるのを防ぐことはできません。また、誤って以下に何かを追加しreturn
、変更が適用されない理由を特定する必要がある問題も発生します。
私が以前にしたことは、最後に行を追加することでした# END_ACTUAL_CONTENT
。たとえば、そのタグを見つけて、後ろのすべてを削除し、定期的に実行するようにスクリプトを設定するスクリプトを作成しました。
次の機能を使用すると、面倒なインストーラをアンインストールすることもできます。
function bashrc_save() { cp -f ~/.bashrc ~/.bashrc.backup }
function bashrc_restore() { mv -f ~/.bashrc.backup ~/.bashrc }
プログラムをインストールすると、bashrc_save; ./install.sh; bashrc_restore
ファイルに対するすべての変更が.bashrc
自動的にロールバックされます。
私は現在さらに一歩進んでいます。私の.bashrc
ファイル(および他の多くの設定ファイル)を別のディレクトリに保存し、~/.configfiles
これらのファイルが通常移動する場所へのシンボリックリンクを作成します。このフォルダの内容はgitリポジトリにあります。システム間の同期を容易にするためにこれを行いましたが、インストーラgit diff
で行った変更をすべて確認し、それを使用してまとめて元git restore
に戻すことができるという利点もあります。