!! [duplicate]와 함께 명령의 별칭을 사용하여 마지막 명령을 호출하십시오.

!! [duplicate]와 함께 명령의 별칭을 사용하여 마지막 명령을 호출하십시오.

후속 질문입니다

sudo로 명령줄 실행

같은 명령을 다시 실행하고 싶다면sudo !!다음 명령을 실행한 후:

echo "something">/path/file

전역 대체 구문을 사용하여 이 명령을 호출할 수 있습니다.

!!:gs/>/|sudo tee -a /

다음 뒤에 공백을 사용하세요.-ㅏ범위.

이는 다음과 같습니다.스도! !그러나 < 및 >의 sudo 제한 사항을 우회하는 데 도움이 될 수 있습니다. sudo에서는 [<, >] 사용을 허용하지 않기 때문입니다.

.bashrc간단히 사용할 수 있도록 이것을 별칭에 어떻게 입력합니까 ?

나는 노력했다

alias redo='!!:gs/>/|sudo tee -a /'

하지만 이것은 작동하지 않습니다. 오류가 발생합니다.

$ echo "sdfdsf">/path/file
bash: /path/file: no permissions

$ redo
bash: /: Is a directory
tee: /: Is a directory

답변1

내 생각에 당신이 찾고 있는 것은 다음과 같습니다.

sudo sh -c "!!"

이는 마지막 명령으로 변환되고 !!쉘 리디렉션/파이프/변수의 기능을 유지합니다.

➜  ~  ping 10.0.0.1
--- 10.0.0.1 ping statistics ---
6 packets transmitted, 3 received, 50% packet loss, time 5001ms
rtt min/avg/max/mdev = 1.736/1.951/2.182/0.185 ms
➜  ~  sudo sh -c "!!" ## And becomes like this:
➜  ~  sudo sh -c "ping 10.0.0.1"

답변2

귀하의 질문에 대한 정확한 답변은 아니지만 그렇게하지 마십시오.

이 별칭 뒤에 숨은 아이디어(작동한다고 가정) >|tee -a foo. 첫째, 최상의 시나리오에서도 동일하지 않습니다. >파일을 덮어쓰고 tee -a추가합니다.

echo >>foo둘째, 이것은 (변환되고 echo |sudo tee -a |sudo tee -a foo실패할 것입니다) 또는 echo 2>&1(변환되고 echo 2|sudo tee -a &1실패할 것입니다) 와 같은 일반적인 구문을 처리하지 않습니다 .

이제 이러한 모든 경우를 합리적으로 처리하는 더 복잡한 대체 코드를 작성할 수도 있지만 이는 세 번째 요점으로 이어집니다.

이렇게 하면 곧 실행될 명령을 볼 기회 없이 루트로 명령이 실행됩니다. 이는 제 생각에는 매우 나쁜 생각입니다. 특히 모든 명령에 적용되는 내용이 있을 때 가장 일반적이라는 사실을 고려하면 더욱 그렇습니다. 상황은 상당히 복잡할 수 있습니다.

그러므로 전반적으로 이와 같은 것은 시도하지 않는 것이 좋습니다.

관련 정보