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
는 생성된 모든 단어를 단어 사이에 공백을 포함하여 한 줄에 출력합니다.
관련된:
- 언제 큰따옴표가 필요합니까?
- 왜 printf가 echo보다 나은가요?(질문과 관련이 있지만 이 경우에 사용해야
echo
한다고 말하는 것은 아닙니다printf
!)