Bash 기록에서 항목을 삭제할 때 오류가 발생하는 이유는 무엇입니까?

Bash 기록에서 항목을 삭제할 때 오류가 발생하는 이유는 무엇입니까?

Bash 기록에서 일부 명령을 삭제하고 싶습니다.

찾아서 history | grep "command with password"삭제할 수 있어요history -d <line-number>

그러나 파이프를 통해 대량으로 삭제하려고 하면 xargs다음 오류가 발생합니다.

history | grep "command with password" | awk '{print $1}' | sort -r | xargs history -d
xargs: history: No such file or directory

나는 이것이 xargs줄 번호 목록을 반복하여 history -d하나씩 명령에 보낼 것이라고 생각했습니다.

이 오류의 원인은 무엇입니까?

알아채다:나는 기록을 삭제하는 다른 방법이 있다는 것을 알고 있습니다. 질문은 순전히 xargs그것이 어떻게 작동하는지, 내가 무엇을 잘못하여 오류를 일으키는 지에 대한 이해를 높이는 것입니다.

답변1

historyxargs가 명령을 찾을 수 없기 때문에 오류가 발생합니다 . 확인하는 데 사용할 수 있는 내장 셸이므로 type historyxargs에는 표시되지 않습니다. 노력하다

echo 1 | xargs history -d; echo $?

반환 값은 127입니다.man xargs, 종료 상태 섹션:

0 if it succeeds
123 if any invocation of the command exited with status 1-125
124 if the command exited with status 255
125 if the command is killed by a signal
126 if the command cannot be run
127 if the command is not found
1 if some other error occurred.

확장하다일카츄의 리뷰, 원칙적으로 Bash를 호출하고 history결과 쉘에서 호출할 수 있습니다.

echo 1 | xargs -I {} bash -c 'echo $HISTFILE; history' bash {}

historyBash 셸에서 모든 내장 명령을 사용할 수 있게 되면 위 명령은 오류를 발생시키지 않습니다. 그러나 동일한 명령에서 HISTFILE설정되지 않고 history아무것도 출력하지 않는다는 사실도 발견했습니다. 비대화형 쉘에서는 기록이 활성화되지 않습니다. 다시 말하지만 set내장 기능을 사용하고 내보내고 HISTFILE활성화 할 수 있지만 HISTFILESIZE골치 아픈 일을 원하지 않습니다..bash_history직접 편집가장 간단한 방법입니다.

관련 정보