특정 응용 프로그램에 대한 명령을 리디렉션하는 방법

특정 응용 프로그램에 대한 명령을 리디렉션하는 방법

예를 들어, 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

관련 정보