! ! : 명령어를 찾을수 없음

! ! : 명령어를 찾을수 없음

최근에 나는 관리자로서 명령을 실행하지 않는 것에 약간 좌절감을 느꼈고 다음을 사용하기 시작했습니다.sudo !!많은. 나는 사용의 용이성을 위해 ffs이 라인에 대한 별칭을 만들기로 결정했습니다. 다음 줄을 추가했습니다 ...

alias ffs="sudo !!"

나를 위한 .zshrc.

그런데 이 기능을 사용하려고 하면 ffs터미널에 들어갈 때 오류가 발생합니다.

sudo: !!: command not found

별칭을 사용하여 호출하면 명령이 작동하지 않는 이유는 무엇입니까? 이전 명령을 다시 실행하는 대신 이 문제를 해결하려면 어떻게 해야 합니까? 미리 감사드립니다!

답변1

별칭 확장 중에는 기록 확장이 수행되지 않습니다.

여기서는 이전 명령과 동일한 코드를 평가하고 싶지만 첨부된 별칭에 인수로 전달한 내용을 앞에 추가합니다 (예: 또는 sudo등 원하는 작업을 수행하지 않을 수 있다는 점에 유의 ). 다음을 수행할 수 있습니다.cmd1; cmd2for i (a b) echo $i

alias ffs='eval "sudo ${history[@]:0:1}"'

아니면 작동하게 할 수도 있지만 sudo zsh -c <the-code-from-the-previous-command+your-args-appended>다음과 같은 경우에는 작동하지 않습니다.echo $non_exported_variable

ffs() sudo zsh -c "${history[@]:0:1} ${(j[ ])@}"

특수 연관 배열은 $history과거 이벤트 번호를 해당 명령줄에 매핑합니다. ${array[@]:offset:length}또한 최신 항목에서 오래된 항목으로 확장된다는 점에서 특별합니다. 따라서 위에서 ksh93 스타일을 사용하여 값 목록의 첫 번째 항목을 가져오면 최신 이벤트를 얻을 수 있습니다 ${${history[@]}[1]}. .

또는 $(fc -nl -1)이를 사용하여 추가 프로세스를 포크할 수도 있습니다.

관련 정보