シェルから呼び出されたときにファイルにコマンドを自動的に追加する方法は?

シェルから呼び出されたときにファイルにコマンドを自動的に追加する方法は?

私は私がインストールしているすべてのプログラムを追跡したいので、コマンドにpacman -S(-Sの後の重要なスペース)が含まれるたびにbashがコマンド文字列をファイルに追加したいと思います。私は現在関数を使用していますが、履歴に行き、関数と引用符で行を囲む必要があるので面倒です。履歴を確認できますが、一般的な解決策が役に立ちます。

1段階のインストールとログでこれを自動化する方法はありますか?

ベストアンサー1

私はあなたが達成しようとすることは不可能ではないが、非常に難しいと思います。必要なものを実行するラッパー関数を作成し、実際のコマンドの代わりにラッパーを呼び出すエイリアスを作成しても、すべてエラーが発生します。通常sudo pacman -S、コンテキストを切り替えてすべての機能とエイリアスを破壊するsudoを実行します。

しかし、すべてが失われるわけではありません。明示的なインストールを使用してインストールされているすべてのパッケージを一覧表示できるので、pacman -Qeいつでもシステムを再インストールしたり、環境を別のシステムにコピーしたい場合は、リストをファイルにインポートしてファイルを次のように変更できます。ターゲットコンピュータでpacmanを実行して、すべてのパッケージをインストールします。

文書作成:

pacman -Qe | cut -d ' ' -f 1 | tr "\n" " " >the-file.txt
  • pacman -Qe処置: 明示的にインストールされたパッケージをすべて一覧表示します。
  • cut -d ' ' -f 1:パッケージのバージョンを削除して名前だけを保持することです。
  • tr "\n" " ":改行文字を空白に変更することです。
  • >the-file.txt処置: 出力をファイルにリダイレクトし、必要に応じてファイル名とパスを変更できます。

スペースで区切られたリストがthe-file.txtに出力されたら、ファイルをターゲットシステムに転送して次のように実行します。

sudo pacman -Sy - <the-file.txt

見て、パックマンはリストにあるすべてのパッケージをインストールしており、同じ結果が得られます。

--needed最新のパッケージを再インストールしないように、pacmanにパラメータを追加することもできますpacman -S --needed ...

新しいシステムがリモートで動作している場合は、ファイル転送をスキップして結果をsshにパイプすると、リモートシステムに進みます。

pacman -Qe | cut -d ' ' -f 1 | tr "\n" " " | ssh -t user@host "sudo pacman -S --needed -"
  • SSHを使用して疑似端末を割り当てます-t。それ以外の場合、sudoは失敗します。

頑張ってください。

おすすめ記事