flatpakパッケージを実行するためのエイリアスを生成する小さなスクリプトがあります(フラットパックをコマンドラインで何とか使用できるようにするため)。このコマンドを手動で実行すると、すべてがうまく機能します。
しかし、flatpakをインストール/更新/削除するたびにこのコマンドを手動で実行したくはありませんが、flatpakコマンドが呼び出されるたびにスクリプトを自動的に実行したいと思います。
だから、より効率的に表現するためにflatpak *
命令をflatpak * && ~/my_script.sh
。
ボーナス:スクリプトが呼び出されたときにのみスクリプトが呼び出され、スクリプトが呼び出されたときに呼び出されないflatpak install
ようにflatpak remove
この関数を制限するにはどうすればよいですか?flatpak list
誰でもこれを達成する方法を知っていますか?
答え1
1つを作成してalias
次の項目に追加できます.bashrc
。
alias flatpak='flatpak_(){ flatpak "$@" && ~/my_script.sh; }; flatpak_'
my_script
最初の引数が次の場合にのみinstall
実行されますremove
。
alias flatpak='flatpak_(){ flatpak "$@" && [[ "$1" = install || "$1" = remove ]] && ~/my_script.sh; }; flatpak_'
答え2
以下でラッパー関数を定義します.zshrc
。
flatpak () {
command flatpak "$@" && ~/my_script.sh
}
組み込み関数は、関数を再帰的に呼び出すのではなく、(にある)command
名前の外部コマンドを呼び出すようにシェルに指示します。に渡された引数のリストに置き換えられます。flatpak
$PATH
"$@"
flatpak
これはすべてのsh-likeシェル(dash、bash、ksh、zshなど)で機能します(機能にアクセスできるように準備した場合)。関数はスクリプトで定義されていません。スクリプトでラッパーを使用するには、スクリプトの上部近くに関数を定義するか、where $PATH
trueの前にある別のスクリプトにラッパーを配置する必要があります。はいflatpak
、見てください単純なラッパースクリプトは100のbashプロセスを生成します。。
特定のコマンドの後にのみスクリプトを実行し、以前のように成功した場合にのみスクリプトを実行します。
flatpak () {
command flatpak "$@" &&
case $1 in
install|remove) ~/my_script.sh;;
esac
}