터미널에서 작업할 때 다음과 같은 명령 시퀀스를 자주 접하게 됩니다.
cat long/path/to/file/xyz.file
nano long/bath/to/file/xyz.file
bash long/path/to/file/xyz.file
등
일반적으로 Ctrl + A를 누르고 오른쪽 화살표를 몇 번 누르고 백스페이스를 몇 번 누른 다음 새 명령을 작성합니다.
하지만 이 작업을 수행하는 10초 동안, 이 작업을 수행할 수 있는 마법 같은 지름길이 있는지 항상 궁금합니다. 그래서 내 질문은 ...
명령을 제거하지만 매개변수를 유지하는 터미널 단축키가 있습니까?
그렇지 않다면 나만의 단축키를 작성할 수 있는 방법이 있나요?
제가 주로 사용하는 터미널은 Ubuntu와 OSX입니다(있는 경우).
답변1
많은 쉘에서는 AltD커서부터 커서 아래 단어 끝까지 삭제가 발생하므로 CtrlA다음을 수행하여 AltD첫 번째 단어를 삭제할 수 있습니다.
또는 기록 작업이 포함된 셸에서 !:1-$
이전 명령의 모든 매개변수가 대체되므로 새 명령을 입력한 후 이 명령을 입력하여 이전 명령의 매개변수를 복사할 수 있습니다.
$ echo Hello sudo rm -rf slash
Hello sudo rm -rf slash
$ printf "%s " !:1-$
Hello sudo rm -rf slash
명령에 인수가 하나만 있거나 마지막 인수에만 관심이 있는 경우 !$
에는 ;
$ cat long/path/to/file/xyz.file
$ nano !$
$ bash !$
답변2
!:1-$
모든 매개변수 가져오기를 사용하는 것 외에 다른 접근 방식을 제공하겠습니다.
맞춤법 오류 수정 모드를 사용하여 로 ^strA^strB
바꿀 수 있습니다 . 예를 들어, 이후strA
strB
$ cat path/to/file
넌 할 수있어:
$ ^cat^nano
cat
그러면 이전 명령의 첫 번째 항목이 변경되고 명령이 다시 실행됩니다. 분명히 이 트릭은 매우 긴 명령 도중에 파일 이름을 변경하려는 경우와 같은 다른 상황에서 더 유용할 수 있습니다.
답변3
좋아요 따라서 다음은 bash 쉘에만 적용되거나 이것이 모든 쉘에 적용되는지 확실하지 않습니다.
각 후속 명령에서 명령줄 매개변수를 사용한다고 가정합니다.
cat long/path/to/file/xyz.file
따라서 다음 명령에서는 "long/path/to/file/xyz.file" 매개변수를 동일하게 유지하고 싶지만 명령을 변경하고 싶습니다. 그렇게 하면nano !$
다음 후속 명령에서도 동일한 작업을 수행하게 됩니다. 물건. bash !$
. 따라서 !$
마지막 명령의 마지막 매개변수를 변경하지 않고 유지하세요. 예를 들어tail -f /var/log/messages
somecommand !$
실제로는 마지막 명령을 변경하지 않고 그대로 둘 수 있는 또 다른 기능이 있습니다 somecommand /var/log/messages
. somecommand -f /var/log/messages
예를 들어, sudo 권한으로 마지막 명령을 실행하려고 합니다. 실행했지만 tail /var/log/messages
내용을 볼 수 있는 권한이 없다고 가정하면 sudo를 사용하여 전체 명령을 작성할 필요가 없습니다.sudo !!
bash 쉘을 실행하면 자동으로 다음으로 변환됩니다.sudo tail /var/log/messages