“apt-get install !!”은 무엇을하고 어떻게 작동하게합니까?


54

나는 누군가 타이핑하는 것을 보았다

apt-get install !!

그는 몇 번이고 그렇게 할 때마다 다른 프로그램이 설치되었습니다. 다음에 필요한 것이 자동으로 파악되는 것 같습니다.

그러나 Ubuntu 14.04.1 LTS 가상 머신에서 사용해 보았을 때 사용법 지침이 표시되었습니다. 인터넷 검색 apt-get install !!이 제대로 작동하지 않는 것 같습니다. 많은 검색 결과에 큰 느낌표가 없습니다.

apt-get install !!내 컴퓨터에서 작동 하지 않는 기능과 누락 된 내용은 무엇입니까 ?


답변:


74

!! 마지막 명령 실행을 의미하는 bash의 바로 가기입니다.

이 시도:

 echo hello
 !!

이 문맥에서는 !!다른 것으로 확장됩니다 echo hello.

나는 그들이 명령을 실행하려고 시도했지만 실패하고 설치되지 않았다고 불평했다. sudo apt-get install !!패키지 이름은 우연히 그들이 실행하려고했던 명령의 이름과 같기 때문에 입력했습니다 . 결과 명령은 방금 실행하려고 시도한 명령과 동일한 이름으로 패키지를 설치하려고 시도합니다.


10
네, 아마 그럴 것입니다. 내가 실행하는 경우 lynx, 그것은 설치되지 않은 것 볼 다음 실행 apt-get install !!은 살쾡이를 설치합니다. 내가 apt-get install !!유일한 명령으로 시도했기 때문에 그것은 나를 위해 작동하지 않았다 .
Thomas Weller

4
또 다른 일반적인 용도는 무언가 sudo와 같이 apt-get install무언가를 실행해야 할 때 입니다.
MBraedley

6
@AL : 먼저 입력 apt-get install some-program하고 권한이 없다는 것을 알게 sudo !!되면으로 확장됩니다 sudo apt-get install some-program.
mgarciaisaia

3
!!의 별칭 !-1이며 bash 기록의 마지막 항목을 의미합니다. !-2두 번째 등등입니다.
Tim

41

!!와는 아무런 관련이 없습니다 apt-get. 이전 명령으로 확장 될 쉘 키워드입니다. 이 확장은 현재 명령이 해석되기 전에 쉘에 의해 수행됩니다.

보낸 사람 man bash:

!! 이전 명령을 참조하십시오. 이것은`! -1 '과 동의어입니다.

예를 들어, 명령을 실행하는 경우 :

echo "foo"

그런 다음 실행하면 :

sudo apt-get install !!

그것은 다음으로 확장됩니다 :

sudo apt-get install echo foo

보시다시피 두 패키지로 확장되고 echo다른 패키지 는 foo입니다. 라는 이름의 독립형 패키지가 없다 foo하고 echo. 그렇다 쉘에서 내장 echo/bin/echo는 GNU-로 coreutils 패키지의 일부 실행 파일. 따라서 해당 패키지를 사용할 수 없다는 오류가 발생합니다.

반면에 다른 사람은 다음과 같이 할 수 있습니다.

$ cowsay
The program 'cowsay' is currently not installed. You can install it by typing:
sudo apt-get install cowsay

$ sudo apt-get install !!
sudo apt-get install cowsay
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Suggested packages:
  filters
The following NEW packages will be installed:
  cowsay
0 upgraded, 1 newly installed, 0 to remove and 119 not upgraded.
Need to get 18.5 kB of archives.

보시다시피 cowsay설치 중입니다.

나는 당신이 (당신이 확실하지 않은 한) 이것을하지 않는 것이 좋습니다.


2
에 대한 훌륭한 설명 !!. 나는 그것이 무엇을 의미하는지 알고 있었지만 당신이 묘사 한 방식이 마음에 듭니다.
Terrance

1
집에서 이것을 시도하지 말 것을 경고하는 +1.
Shadur

16

!!: 이전 명령을 참조하십시오. 이것은 !-1(The source ) 와 동의어입니다 .

예를 들어, 내가 실행하면 :

./test

그런 다음 루트 여야 함을 기억하면 간단히 다음과 같이 입력 할 수 있습니다.

sudo !!

입력하는 것과 같습니다.

sudo ./test

마지막 명령에 많은 문자가 포함되어있을 때 유용합니다.


1
훌륭한! 나는 sudo !!명령 에 대해 전혀 생각하지 않았다 . 몇 년 동안 내가 한 일은 위로 키를 한 번 누른 다음 커서를 왼쪽으로 완전히 이동하고 추가 sudo합니다.
IQAndreas

1
@IQAndreas 당신의 길은 당신에게 명령을 다시 점검 할 기회를줍니다 sudo.
Matt Nordhoff

1
나는 항상 "스도!" "나는 f ***를 위해 sudo를 의미했다"
Viktor Mellgren

1
@Vixen :이 경우 thefuck 도 당신을위한 것일 수 있습니다
Thomas Weller

@IQAndreas 커서를 왼쪽 끝까지 움직이면 너무 지루해 보입니다. 왜 Ctrl+A안되나요 Home?
Ruslan

2

질문에 이미 답변되었으므로 반복하지 않습니다. 그러나 다양한 쉘에 명령을 반복 / 찾기 / 편집하는 데 도움이되는 많은 단축키가 있음을 지적하고 싶습니다. 내가 사용하는 것 중 일부는 다음과 같습니다.

  1. !$뒤에 ENTER마지막 명령의 마지막 단어를 입력합니다. 예를 들어

    ls -l /let/me/in
    cd !$
    

이것은 당신을 착륙시킵니다 /let/me/in

  1. Ctrl- R이전 명령에서 몇 단어를 입력하십시오. 예를 들어, 당신은 입력 vi /home/mycoolproject.sh과 같은 어떤 임의의 명령으로 그것을 따라 ls, cd, pwd, 등 그럼 그냥 입력 Ctrl- R다음에 cool그 끌어 올려서 vi명령을 사용합니다.

bash (또는 csh 또는 기타) 키보드 단축키를 검색하면 오늘 가장 잘 할 수 있습니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.