
cpodin
여러 빌드 아티팩트를 다른 디렉터리에 복사하는 스크립트가 있습니다 . 그런 다음 SHA1SUM
대상 디렉토리에서 편집합니다 .
예를 들어:
cpodin /foo/bar/baz
vim !$/SHA1SUM
fixsha
후자의 명령을 인수를 사용하지 않고 SHA1SUM
이전 명령의 마지막 인수로 명명된 디렉터리에서 편집하는 별칭으로 만들려면 어떻게 해야 합니까 ? 별칭
alias fixsha='vim !$/SHA1SUM'
!$/SHA1SUM
대신 편집을 시도하게 됩니다 /foo/bar/baz/SHA1SUM
.
답변1
Bash는 별칭 확장 후에 기록 확장을 수행하지 않으므로 에 history
문서화된 를 사용하여 명시적으로 수행해야 합니다.Bash 기록 내장그리고 아래에서 발췌했습니다.
history -ps args
-p
에서 기록 대체를 수행합니다.인수결과를 기록 목록에 저장하지 않고 표준 출력에 결과를 표시합니다.-s
인수는 기록 목록 끝에 단일 항목으로 추가됩니다.
별칭은 alias fixsha='vim $(history -p !$)/SHA1SUM'
대부분의 경우 작동하지만 !$
공백이 포함된 경로로 확장되면 의도한 대로 작동하지 않습니다. 경로 인수 주위에 큰따옴표를 추가하면 공백에 대한 모든 이스케이프가 보호되고 vim "/foo/bar\ baz/SHA1SUM"
원하는 결과 vim /foo/bar\ baz/SHA1SUM
나 이에 상응하는 결과가 발생합니다 vim "/foo/bar baz/SHA1SUM"
.
따라서 명시적인 기록 확장 외에도 eval
인용의 한 레이어를 풀어야 합니다.
alias fixsha='eval vim "$(history -p !$)/SHA1SUM"'
메모:위 별칭 정의에서 큰따옴표가 불필요하다는 사실을 알면 놀랄 수도 있습니다. 이는 bash의 단어 분할을 트리거하는 확장된 값 !$
과 사이에 공백이 없기 때문입니다. /SHA1SUM
그러나 나는 그것이 단일 주장으로 확장된다는 의도를 강조하기 위해 거기에 있는 것을 좋아합니다.