bash: 기록 -d 기능이 기록 항목을 삭제하지 않습니다.

bash: 기록 -d 기능이 기록 항목을 삭제하지 않습니다.

history -d 1일부 게시물을 읽은 후에도 함수에서 항목을 삭제하지 않는 방법을 알 수 없습니다 .

다음 함수는 명령줄로 직접 이동합니다.

function test () {
  echo "HISTFILE: '${HISTFILE}'"
  history -d 1
}

그런 다음 다음을 실행합니다.

history -c
echo "to remove"
history
    1  echo "to remove"
    2  history
echo $(test)
HISTFILE: '/home/user/.bash_history'
history
    1  echo "to remove"
    2  history
    3  echo $(test)
    4  history

기록의 첫 번째 항목을 삭제하지 않고 이를 수행할 수 있는 방법에 대한 아이디어가 있습니까?

답변1

이 함수(그런데 표준 유틸리티의 이름을 오버로드하므로 아마도 변경해야 함)는 명령 대체(별도의 하위 쉘)에서 실행됩니다.

서브셸에서는 첫 번째 기록 항목을 삭제합니다. 그러나 쉘 호출 기록에는 영향을 미치지 않습니다.

먼저 함수의 이름을 다른 것으로 바꾼 다음 test(오류가 수정되지는 않지만 test이미 표준 유틸리티임) echo $(some-command)명령이나 함수의 출력을 인쇄하는 데 사용을 중지합니다. 이는 몇 가지 문제가 있는 안티 패턴입니다. 함수 이름을 사용하세요. 이미 자체 출력을 수행하고 있습니다.

echo불필요한 명령 대체 외에도 출력 echo에 백슬래시가 포함된 경우 명령 출력이 변경될 수 있습니다. 또한 따옴표가 없는 명령 대체는 쉘이 $IFS명령 출력을 공백, 탭 및 개행(의 모든 문자)으로 분할하도록 하고 분할된 단어에 파일 이름 글로빙을 적용합니다. 그런 다음 유틸리티 echo는 생성된 모든 단어를 단어 사이에 공백을 포함하여 한 줄에 출력합니다.

관련된:

관련 정보