터미널에서 작업할 때 현재 프롬프트에서 마지막 줄의 마지막 인수를 삽입하는 것이 ⌥.( 다른 많은 경우와 마찬가지로) 유용하다는 것을 알았습니다 . alt.그러나 마지막 줄을 주석 처리하면 작동하지 않습니다(가정 set -o interactivecomments
).
정확한 사용 사례는 생각나지 않지만 이런 일이 여러 번 발생했습니다. 실행하기 전에 깨달은 명령이 당시에 필요했던 것이 아니라는 사실을 깨닫고 해당 명령의 최종 매개변수를 후속 명령에 입력하고 싶었습니다. .
나는 주석 처리된 모든 것을 무시하는 논리가 있다는 것을 알고 있습니다. 왜냐하면 그것은 결코 해석되지 않고 따라서 그 중 어느 것도 매개변수로 표시되지 않기 때문입니다.하지만내가 원하는 것을 할 수 있는 방법이 있나요?
내가 원하는 것을 수행하는 대체 명령에 바인딩된 다른 키 입력을 사용해야 한다면 이상적이지는 않지만 사용할 수는 있습니다.
저는 Zsh를 사용하고 있지만 Bash 솔루션이 작동할 수도 있고 Zsh에서 수행해야 하는 작업에 가까울 수도 있습니다.
답변1
이 명령을 주석 처리하지 마십시오.
:
대신에 를 앞에 넣으면 #
명령 텍스트 인수가 됩니다.null 유틸리티 :
, 실행 시 아무 작업도 수행하지 않음. 인수는 여전히 명령이므로 태그가 지정되고 구문 분석되지만 다른 처리는 수행되지 않습니다.
어떤 경우에는 이것이 부적절합니다. 특히 명령을 평가할 때 그렇습니다.그 자체부작용이 있습니다. 간단한 예는 다음과 같습니다명령 대체:
$ : log $(find -print -delete) --target /var/run/cache
이 경우 원래 명령 자체는 실행되지 않더라도 내부 명령이 $(...)
실행되고 인수로 대체됩니다 . :
피해가 덜한 경우는${foo:=default}
매개변수 확장, 값을 할당하는 부작용이 있습니다 $foo
.
마지막으로 리디렉션이나 파이핑이 계속 발생합니다.
$ : foo > outfile
$ : bar | grep x | ...
두 경우 모두 빈 출력이 대상으로 전송되어 파일을 자르거나 생성하거나 후속 명령을 실행하므로 빈 입력이 마음에 들지 않을 수 있습니다.
명령에 대해 특별한 우려 사항이 없다면 이는 완전히 안전하며 다음에서 수행할 수 있습니다.다루기 힘든,불다및 모든 POSIX 호환 셸(단, 후속 alt-. 동작은 모든 곳에서 작동하지 않음)
원하는 마지막 단어인 경우 zsh는 명령줄을 조작하는 데 사용할 수 있는 사용자 정의 가능한 키 바인딩과 명령을 제공합니다. bindkey '^K' kill-region
해당 단어 이전으로 돌아갈 수 있는 경우 줄의 시작 부분까지 Ctrl-erase를 사용하면 safe 명령을 사용하여 관심 있는 한 단어만 남길 수 있습니다.K:
답변2
주석을 통해서도 이 작업을 수행할 수 있습니다. :
다른 단축키를 사용하려는 경우 다음으로 전환할 필요가 없습니다.
마지막 위치 인수를 출력하는 함수를 정의합니다.
lastarg () { test $# -eq 0 && return 1; while [ $# -gt 1 ]; do shift; done; printf '%s' $1; }
다음을 호출하는 키 바인딩을 만듭니다.
lastarg $(history 2 | head -1)
그리고 출력을 삽입합니다.
마지막 인수를 인용하면 단어 분리로 인해 잘못된 결과가 발생할 수 있습니다.
위험한 인용문 버전
나쁜 일이 일어나지 않을 것이라고 확신하는 경우(인용되지 않은 <
, >
, &
, $()
, \``,
; ,
# , and no0 single
" or
'`를 사용하면 주석 처리된 줄에서 인용된 마지막 "인수"를 얻을 수 있습니다.
# dummy foo\ \ \ bar
eval : $(history 2 | awk 'NR==1 { sub(" *[0-9]* *#",""); print; }') \; echo '"$_"'
+ eval : dummy 'foo\' '\' '\' bar ';' echo '"$_"'
++ : dummy 'foo bar'
++ echo 'foo bar'
foo bar
답변3
!$
마지막 인수에 해당하는 쉘 내장을 사용하십시오.
나는 또한 쉘에서 comment 명령의 마지막 인수에 액세스할 수 있게 해주는 zsh를 사용하고 있습니다.
답변4
다음을 추가할 수 있습니다 ~/.zshrc
.
zshaddhistory() {
local histchars=
print -Sr -- ${1%$'\n'}
fc -p
}
즉, zshaddhistory
현재 명령줄을 기록에 추가하기 전에 호출되는 특수 후크 함수에서 우리는 histchars
주석 처리를 비활성화하는 빈 함수를 직접 추가합니다 print -S
. fc -p
명령줄이 기록에 다시 추가되지 않았는지 확인하세요.