特定のアプリケーションのコマンドをリダイレクトする方法

特定のアプリケーションのコマンドをリダイレクトする方法

たとえば、fehプログラムはおそらくrmある時点でこのコマンドを使用して現在表示されている画像を削除できます。ファイルを削除せずに代わりにジャンクスクリプトを実行したいとします。ファイルを実行できますが、呼び出されるたびに実行するように欺くtrash.sh方法はありますか?fehtrash.shrm

答え1

ソースコードを変更し、その言語のシステムコールではなくfehランダムスクリプトを実行してから、新しいコードをコンパイルする必要があります。unlink()C

git clone https://github.com/derf/feh.git
cd feh
cat<<EOF > trashbin.patch
--- src/filelist.c  2023-09-18 23:19:53.444892742 +0200
+++ src/filelist_new.c  2023-09-18 23:19:11.293556737 +0200
@@ -112,7 +112,11 @@
 
 gib_list *feh_file_rm_and_free(gib_list * list, gib_list * l)
 {
-   unlink(FEH_FILE(l->data)->filename);
+   //unlink(FEH_FILE(l->data)->filename);
+    char command[255];
+    sprintf(command, "/usr/local/bin/trashbin.sh %s", FEH_FILE(l->data)->filename);
+    system(command);
+    
    return(feh_file_remove_from_list(list, l));
 }

EOF
patch src/filelist.c < trashbin.patch
make
sudo make install

次に、次を生成します。

/usr/local/bin/trashbin.sh

欲しいものと同じ

#!/bin/sh

mkdir -p ~/.local/trashbin
/bin/mv -- "$@" ~/.local/trashbin

関連情報