
BASH에는 기록에서 볼 수 없는 정말 편리한 매개변수/변수 확장 기능이 있습니다. 나는 역사와 BASH 자체에 대한 매뉴얼 페이지를 확인했습니다. 거기는 아니고...아마 제가 놓쳤던 것 같아요.
예: 저는 ssh를 많이 사용하는데 변수 확장을 사용하면 이 작업을 수행할 수 있습니다.
[email protected]
호스트만 추출하고 싶다고 가정해 보겠습니다. 오히려 사용자 이름을 제거합니다.
hostonly=${host##*@}
만약 내가
echo $hostonly
나는 얻다:
bar.org
내 질문: 명령줄 기록으로 이 작업을 수행할 수 있습니까?
예:
명령 1:
ssh [email protected]
명령 2:
ssh gary@!!:##*@
물론 이것은 작동하지 않습니다. 그러나 누군가 이러한 유형의 패턴 일치가 가능한지 여부를 확인할 수 있습니까?
감사해요!
부브노프
답변1
사람들이 종종 놓치는 깔끔한 요령은 명령입니다 r
(이 명령 자체는 명령의 특별한 경우입니다 fc
).
$ ssh [email protected]
(...)
$ r foo=baz
보다 일반적인 경우는
$ fc -s foo=bar ssh
이를 통해 하위 문자열로 기록에서 명령을 선택한 다음 지정된 대체를 수행하고 실행할 수 있습니다. 를 그대로 두면 더 복잡한 수정을 위해 -s
명령이 에 로드됩니다 . $EDITOR
명령줄 편집을 사용하면 대부분 이 작업이 필요하지 않지만 명령줄에서 수행하기 어려운 일부 편집이 있습니다.
히스토리 참조 구문을 사용하여 상당히 복잡한 조작을 수행할 수도 있지만 !
역사적 이유로(기본 히스토리 메커니즘은 초기에 확립되었으며 csh
모든 개선 사항은 대부분 호환성을 유지했습니다) 다른 구문을 사용합니다. 보다여기자세한 내용은.
답변2
$ ssh [email protected]
...
$ ^foo^gary^
...
"foo" 대신 "gary"를 사용자 이름으로 사용하여 명령이 반복됩니다. 다음은 같은 방식으로 작동합니다.
$ ssh [email protected]
...
$ !!:s/foo/gary/
...