답변:
아니.
디버거로 '대화식'비트를 뒤집는 방법을 찾지 못하면.
coreutils/src/remove.c:335
→ coreutils/lib/yesno.c:46
(생성됨) → rpmatch(3)
: "인식 된 부정적 응답에 대해 0을 반환 ("no "), 인식 된 긍정적 인 반응에 대해 1을 반환 ("yes "), 응답 값을 인식 할 수없는 경우 -1
글쎄, 이것은 실제로 당신의 질문에 대답하지 않습니다. 그러나을 사용하는 대신 다음에 대한 rm -i
별칭 rm
을 고려하십시오 rm -I
.
매뉴얼 페이지는 다음과 같이 말합니다.
-I prompt once before removing more than three files, or when removing
recursively. Less intrusive than -i, while still giving protection
against most mistakes
에 ~/.bashrc
넣어 :
alias rm='rm -I'
이것은 실제로 유용합니다!
화면에서 실행중인 경우 (일반적으로 좋은 아이디어) 다음을 수행 할 수 있습니다.
ctrl-a : exec .! yes y
그러면 화면이 y가 출력 인 'yes'명령이 실행되고 해당 출력이 실행중인 프로그램 (rm -i)으로 보내집니다.
애플리케이션 파일 디스크립터를 즉시 교체하여 수행 할 수 있습니다. 그래도 중간 파일이 필요합니다.
gdb와 이와 같은 명명 된 파이프를 사용할 수 있습니다 (더 많은 터미널을 사용하고 있다고 가정하면 화면이나 다른 것을 사용해야 함).
그런 다음 gdb에 다음 명령을 입력하여 PID를 대체하십시오.
attach rmPID
call open("/path/to/myYesYesPipe",66,0666)
call dup2(3,0)
call close(3)
detach
quit
이것은 키보드를 rm에 대한 명명 된 파이프로 대체합니다.
이제 명명 된 파이프를 채워야합니다
rm은 파이프를 읽고 모든 것을 덮어 씁니다.
rm
백그라운드 에서 프로세스를 넣습니다 Ctrl+Z
.rm -i *
명령)-i
Enter
명령을 실행fg %1
Ctrl+C
5s/fg/kill/; 6d