Bash 기록 교체가 기본적으로 여전히 활성화되어 있는 이유는 무엇입니까? [폐쇄]

Bash 기록 교체가 기본적으로 여전히 활성화되어 있는 이유는 무엇입니까? [폐쇄]

bash가 왜 아직도 있는지 아는 사람 있나요?역사적 교체기본적으로 활성화되어 있습니까?광산은 수년 동안 .bashrc포함되어 있었지만 일부 다른 사람들은 여전히 ​​이 기능으로 인해 어려움을 겪고 있습니다.set +H

거의 모든 사람이 복사-붙여넣기 기능이 있는 터미널을 사용한다는 점을 고려하면그리고readline라이브러리로 컴파일된 bash그리고기본적으로 기록 교체는 대화형 셸에서만 활성화됩니다. 실제로 해당 기능을 사용할 이유가 있습니까? 이 기능이 모든 쉘에 대해 기본적으로 비활성화되어 있어도 기존 스크립트는 손상되지 않습니다.

기록 교체가 중단된 이유를 모르는 경우 다음을 시도해 보십시오.

$ set +H # disable feature history substitution
$ echo "WTF???!?!!?"
WTF???!?!!?
$ set -H # enable feature history substitution
$ echo "WTF???!?!!?"
echo WTF???echo WTF???!?!!?
WTF???echo WTF???!?!!?

(분명히 이 기능이 모든 스크립트에 대해 기본적으로 비활성화되어 있고 실행 전에 결과를 확인하는 기능이 있다면 큰 문제가 있습니다: shopt -s histverify.)

또한보십시오:

답변1

이미 익숙하다면 bash기록 대체 패턴을 다루는 것이 해당 셸에 고유한 다른 문자를 다루는 것보다 더 이상 귀찮게 하지 않습니다. 그러나 쉘에 익숙하지 않거나 단순히 히스토리 교체 기능을 사용해 본 적이 없는 사람은 겉보기에 무해해 보이는 따옴표가 없거나 큰 따옴표로 묶인 문자열이 이를 트리거할 때 분명히 놀랄 것입니다.

히스토리 대체가 활성화된 대화형 쉘에서 문자의 특수성은 !문자의 특수성과 거의 동일합니다. 즉, 작은따옴표로 묶인 문자열을 사용하거나 내부에서 이스케이프하지 않는 한 모든 곳에 나타납니다.$\

through 와 달리 $이 문서에서는 역사적 대체를 확장하지 않으며 라인 중심이므로 추가로~ 할 것이다 따옴표가 없는 컨텍스트 또는 큰따옴표로 묶인 컨텍스트(단독 스캔할 경우 해당 라인)에 교체가 있는 줄에서 발생합니다.자세한 내용은 이 버그 보고서를 참조하세요..

비대화형 쉘(스크립트)에서 기록 교체를 비활성화하는 것은 해당 기능에 "중요한 문제"가 있어서가 아니라 쉘의 명령 기록 기능이 필요하지 않기 때문입니다. 스크립트에서는 $HISTFILE모든 명령을 저장할 필요가 없으며 기록 교체도 마찬가지로 스크립트에서 의존하고 싶은 것이 아닙니다.

대화형 쉘에서 기본적으로 활성화되어야 하는지 여부는 논쟁의 여지가 있습니다(비록 이 주장에 완전히 확신하지는 않지만).여기개발자에게 매우 중요합니다 bash.) 당신은 대부분의 사용자가 기록 확장에 문제가 있다고 생각하는 것 같습니다 bash. 그러나 당신이나 나는 그것을 사용하는 것이 얼마나 흔한지 모릅니다.

Unix 쉘을 사용하면 사람들은 개인적인 필요와 취향에 맞게 쉘의 동작을 수정할 수 있습니다. 모든 대화형 쉘에 대한 기록 교체를 끄고 싶다면 파일 set +H에서 사용 중인 작업을 계속하거나 개발자에게 ~/.bashrc로비를 통해 bash기본값을 변경하십시오(확실히 도움을 받는 것보다 더 많은 사람들을 화나게 하고 혼란스럽게 할 것입니다). ) ).

답변2

기록 교체가 유용합니다. 예를 들어

% make-me-a-sandwich
make-me-a-sandwich: Permission denied
% sudo !!
Ok.

답변3

사회적/문화적 관성.

이 질문은 인간이 어떻게 일하는지에 대한 질문 공간에 속하므로 기능의 존재 여부에 대한 의견은 제시하지 않고 그런 관점에서 답변하겠습니다.~해야 한다기본적으로 켜져 있습니다.

먼저, 상대방을 확실히 이해하려면 해당 기능을 끄기 위해 애쓰는 것이 상대방이 당신을 짜증나게 한다는 점을 고려하세요.회의해당 기능을 켜기 위해 노력해야 하는 것처럼 느껴집니다.

위의 내용과 bash실제로 이 기능을 사용하는 사용자가 많다는 사실로 인해 이 기능을 기본적으로 제거하거나 끄라는 제안은 기본적으로 이 기능에 익숙해진 사람들의 저항에 부딪혔습니다.

게다가 bash이는 많은 사람들의 기본 셸입니다(오직기본 로그인 또는 시스템 셸이라는 의미이지만 심리적인 의미입니다. 쉘의 참조 프레임이 이고 bash이것이 처음 배우는 쉘이라면 !그것이 특별한 쉘 문자라는 사실이 자연스럽고 자동적으로 느껴질 것입니다(또는 적어도 처음 배울 때 그것은 단지 쉘의 작업 방식은 허용되는 많은 단점 중 하나일 뿐입니다.)

생각해보면 많은 bash사용자들이 히스토리 대체 구문을 접하게 될 것입니다.긍정적인배경: 처음 배울 때, 그들은 그것에 대해 읽거나 누군가가 그것을 그들에게 보여주고, 그것이 어떻게 유용할 수 있는지 알게 됩니다 bash.

본과 같은 다른 껍질의 외부 세계에서만 !특별한 느낌에 끌릴 것입니다.그리고따라서 부정적으로 보는 경향이 있습니다. 왜냐하면 해당 기능이 전혀 없는 쉘에 익숙하다면, 서둘러 어떤 일을 처리하려고 할 때 처음으로 그런 일을 하게 될 것이기 때문입니다. 당신은 문제에 노출됩니다.

요약: 대부분의 사용자는 별로 신경 쓰지 않을 것입니다.기본어느 쪽이든, 일부 사용자는 이 기능을 좋아하고 이미 그로부터 강력한 이점을 누리고 있지만, 이를 극복하기 위해 적극적으로 반대하는 사람은 많지 않습니다.

답변4

Bash 기록 교체가 기본적으로 여전히 활성화되어 있는 이유는 무엇입니까?

많은 사람들이 그것을 사용하고 대화식 bash 쉘을 사용하는 사람들은 아마도~해야 한다문제를 피하기 위한 규칙을 배우면 일반적으로 그것이 해로움보다 도움이 된다는 것을 알게 될 것입니다.

내 .bashrc에는 수년 동안 set +H가 포함되어 있었지만 일부 다른 사람들은 여전히 ​​이 기능으로 인해 괴로움을 겪고 있습니다.

따라서 사용하지 않는 기능이라고 해서 대부분의 사용자가 사용하지 않는 것은 아닙니다. 기본 설정 변경을 요청할 수 있으나 고려해야 할 사항 A)케어, 그리고 B) 당신의 방식을 좋아하는 사람들의 비율. 저 사람들케어그리고그것을 좋아하지 않는다비활성화되었을 수 있습니다. 이를 변경하면 새 컴퓨터에서 계정을 얻을 때 도움이 됩니다. 사람들은 그렇게 생각해요케어그리고좋아요나중에 사용하는 모든 컴퓨터와 얻는 모든 계정에서 설정을 업데이트해야 합니다.

거의 모든 사람이 복사-붙여넣기 기능이 있는 터미널을 사용한다는 점을 고려하면

제 생각에는 이것이 더 부피가 큰 옵션입니다 ...

정말 이 기능을 사용하게 된 이유가 있나요? 이 기능이 모든 쉘에 대해 기본적으로 비활성화되어 있어도 기존 스크립트는 손상되지 않습니다.

예, 사람들은 그것이 유용하다고 생각합니다. 예전에는 일어나서 채널만 돌리면 되었는데 리모콘이 무슨 소용이 있겠습니까?

(이 기능이 모든 스크립트에 대해 기본적으로 비활성화되어 있고 실행 전에 결과를 확인하는 기능인 shopt -s histverify가 있다면 분명히 이 기능에는 심각한 문제가 있습니다.)

기록은 실제로 스크립트에서 아무 의미도 없지만 더 중요한 것은 보안 문제를 일으킬 수 있다는 것입니다. 귀하의 경우 작은따옴표를 사용하여 문제를 피할 수 있습니다. 이것이 나에게 문제를 일으킨 기억이 없는데 어떻게 "중요한 문제"가 있다고 말할 수 있는지 모르겠습니다. 이로 인해 실제 문제가 발생합니까, 아니면 새 컴퓨터에 기본값을 설정해야 해서 짜증이 나나요?

정말로 돈을 벌고 싶다면 이스케이프 처리하거나 작은 따옴표를 사용하는 것과 어떻게 다른지 모르겠습니다.

$ echo "Give me $50 or the cat gets it"
Give me $0 or the cat gets it

관련 정보