기록의 매개변수를 사용하여 명령 실행

기록의 매개변수를 사용하여 명령 실행

긴 명령을 입력해야 할 때마다 기록을 참조할 수 있는 느낌표가 매우 편리하다는 것을 알았습니다. 예를 들어, 내가 사용한 마지막 명령을 !ssh호출하는 데 사용할 수 있습니다 . ssh그러나 검색에 공백으로 구분된 매개변수를 추가하면 작동하지 않습니다.

을 실행함으로써 !ssh -i"ssh -i" 문자열로 시작하는 마지막 명령이 실행되기를 원합니다. 그러나 호출되는 실제 명령은 ssh인수가 포함된 마지막 명령이며 해당 명령에 "-i"가 추가됩니다.

를 사용할 수 있지만 !?ssh -i?이는 다른 작업을 수행하는 것을 의미하며 이를 달성할 수 있는 쉬운 방법이 있어야 한다고 생각합니다. history|grep ...매번 타이핑하기엔 너무 게으른데요 .

그러면 위에서 언급한 것처럼 공백이 포함된 문자열로 시작하는 명령을 기록에서 어떻게 참조합니까?

편집하다문제에 대한 설명이 충분히 명확하지 않은 것 같습니다. 다음과 같은 기록이 있다고 가정 해 보겠습니다.

ssh -i identity host1
echo ssh -i
ssh host2

이제 를 실행하면 !ssh세 번째 명령이 ssh host2실행됩니다. !ssh -i첫 번째 명령을 실행하기 위해 입력할 것으로 예상했지만 ssh host2 -i대신 실행되었습니다(이로 인해 오류가 발생함). 다음을 사용하여 !?ssh -i?첫 번째 명령을 실행할 수 있습니다 .두 번째 명령이 존재하지 않는 경우에만.

답변1

나는 당신이 bash의 HISTControl의 기본 동작을 변경하고 싶어한다고 생각합니다. 이 기사에서: bash에서 공백으로 시작하는 명령을 저장하지 않는 이유는 무엇입니까?

조직 통제

명령이 기록 목록에 저장되는 방식을 제어하는 ​​콜론으로 구분된 값 목록입니다. 값 목록에 공백 무시가 포함되어 있으면 공백 문자로 시작하는 줄은 기록 목록에 저장되지 않습니다. 무시된 값으로 인해 이전 기록 항목과 일치하는 행이 저장되지 않습니다. ignoreboth의 값은ignorespace와ignoredups의 약어입니다.

스킵하고 싶다면! 공백을 허용한 다음 bash가 아닌 다른 쉘을 사용해 보는 것이 좋습니다. 생선 껍질은 귀하의 요구 사항에 완벽합니다 :)

sudo apt-get 설치 물고기

Bash 쉘에서 시도하려면 "fish"를 입력하십시오.

마음에 들면 계속 사용할 수 있습니다.

chsh -s /usr/bin/fish

답변2

의견을 주신 Mark Plotnick에게 감사드립니다. 해결책을 찾았습니다. bash 기록 확장을 사용하지는 않지만. (나는 [bash 참조 매뉴얼 섹션 9.3.1]을 읽은 후에 bash 히스토리 확장을 사용하여 이를 달성하는 것이 불가능하다고 생각합니다.)https://www.gnu.org/software/bash/manual/html_node/Event-Designators.html)

해결책은 전역 효과를 위해 다음 줄을 ~/.inputrc해당 줄에 넣거나 주석 처리를 제거하는 것 입니다./etc/inputrc

"\e[5~": history-search-backward
"\e[6~": history-search-forward

을 누르면 해당 CtrlV코드를 찾을 수 있으며 PageUp명령은 다음에서 가져옵니다.Bash 매뉴얼 섹션 8.4.2.

그런 다음 PageUpMark가 언급한 것처럼 키를 사용하여 첫 번째 명령으로 이동할 수 있습니다.

관련 정보