터미널에서 마지막 명령 복사


22

up arrow다음 예제와 같이를 눌러 터미널에서 마지막 명령을 볼 수 있습니다 .

나는 타이핑했다 cd /:

Makss-Mac:~ maks$ cd /

...을 누르고 enter명령을 cd /실행하면 up arrow명령을 cd /다시 눌러 다시 볼 수 있습니다 .

Makss-Mac:/ maks$ cd /

마지막 명령뿐만 아니라 클립 보드에 복사하고 싶습니다.

터미널에 마지막 명령을 표시 up arrow할뿐만 아니라 클립 보드에 복사 하는 바로 가기가 있을 수 있습니다.

또는 현재 터미널 라인에서 모두를 선택하는 바로 가기가 있습니다. 을 눌러 마지막 명령 (을 누른 후 up arrow) 을 복사 할 수 있습니다 super+c. 물론 마우스로 선택할 수 있습니다. 그러나 명령이 10 배 더 길면 cd /특히 30 초마다 수행하는 경우 시간이 많이 걸릴 수 있습니다.

또는 터미널 용 플러그인을 작성하는 방법이있을 수 있습니다


나중에 클립 보드의 내용으로 수행하려는 작업에 대한 세부 정보를 추가 할 수있는 경우 여기에서 해결책을 찾는 것이 더 쉬울 수 있습니다. 붙여 넣기 할 위치는 어디입니까?
nohillside

예, 다른 터미널 탭에 붙여 넣기
Maxim Yefremov

답변:


17

이것을 당신의 ~/.bashrc ~/.bash_profile또는 당신이 좋아하는 곳에 넣 습니다 :

alias copyLastCmd='fc -ln -1 | awk '{$1=$1}1' | pbcopy '

새 창을 열거 나 실행 하면 클립 보드에 명령 source ~/.bash_profile을 실행할 수 있습니다 copyLastCmd.

진행 상황을 설명하려면 기본적으로 "fix command"( fc)를 사용하여 마지막 명령을 얻으려면 앞뒤 공백을 제거하여 더 나은 서식을 지정 awk하고을 사용하여 Mac의 판지에 복사하십시오 pbcopy.

편집하다:

이제 다른 터미널 탭에 붙여 넣기 위해 복사하려고한다는 것을 알았 ~/.bashrc ~/.bash_profile으므로 다른 옵션이 있습니다.

shopt -s histappend
PROMPT_COMMAND='$PROMPT_COMMAND; history -a; history -n'

그런 다음 새 탭이 열리면 "탭 A"및 "탭 B"라고합니다.

  1. 탭 A에서 명령을 실행하십시오.
  2. 탭 B로 전환하고 줄 에서 Enter 키를 누르면 "새"새 줄이 표시되므로 기록을 다시 평가할 수 있습니다.
  3. 위쪽 화살표를 한 번 사용하면 탭 A에 방금 입력 한 명령이 있어야합니다.

편집 2 : 나는의 사용을 대체 한 sed으로 awk모두 선행 및 후행 공백 돌봐 위의 원래의 대답.


그것은 훌륭한 별명입니다! 후행 줄 바꿈을 잘라 붙여 넣기 후 명령을 편집 할 수 있도록 다음을 사용했습니다 awk.alias copyLastCmd='fc -ln -1 | sed '1s/^[[:space:]]*//' | awk 1 ORS="" | pbcopy '
nwinkler

@ nwinkler : OH, 맞아 awk를 사용해야합니다 : fc -ln -1 | awk '{$1=$1}1'후행과 선행 공백을 제거합니다.
Asmus

1
특수 문자의 별칭을 수정해야했습니다 alias copyLastCmd="fc -ln -1 | awk '{\$1=\$1}1' | pbcopy". 여전히 내 공감을 얻는다
Mike D

1
한 터미널에서 "git -reset --hard"를 수행하고 다른 "unspectspecting git folder"에서 위쪽 화살표를 눌렀을 때까지 이것을 사용했으며 이전에 사용했던 스크립트를 실행하고 있다고 생각하면서 급히 입력했습니다. 당신은 무슨 일이 있었는지 상상할 수 있습니다. 이것이 제가 공유 한 "글로벌"역사를 사용한 마지막 시간입니다
MrGigu

@MrGigu는 실수로 "상위"화살표를 한 번이 아니라 두 번 눌렀을 때 "로컬"히스토리로 나에게 일어났습니다. 수업은 어려운 방법을 배웠습니다.
Asmus

5

@Asmus의 답변을 기반으로 한 또 다른 내용이 있습니다. 내 bash 스크립트에서 별칭을 작동시키기 위해서는 작은 따옴표를 사용해야했습니다. 작은 따옴표는 추가 따옴표없이 작은 따옴표로 묶인 별칭에서 작동하지 않기 때문입니다.

alias copyLastCmd='fc -ln -1 | awk '\''{$1=$1}1'\'' | pbcopy'

'\''기본적으로 다음, 현재 견적을 닫습니다 이스케이프 견적을 추가 한 다음 다시 실제 견적을 엽니 다.

위 버전은 마지막 명령을 클립 보드에 복사하고 붙여 넣으면 마지막에 개행 문자 가 표시되므로 즉시 실행됩니다 .

마지막에 줄 바꿈을 제거하려면 명령을 실행하기 전에 실제로 편집 할 수 있으므로 다음을 수행하십시오.

alias copyLastCmd='fc -ln -1 | awk '\''{$1=$1}1'\'' ORS='\'''\'' | pbcopy'

ORS=''(의없이 그 인용) 당신이 그것을 실행하기 전에 붙여 넣은 텍스트를 편집 할 수 있도록, 후행 개행 문자를 제거합니다.


5

히스토리 확장 을 사용 하여 마지막 명령을 가져와 에코합니다. pbcopy마지막 명령을 클립 보드에 저장하기 위해 파이프 할 수 있습니다 .

> echo !! | pbcopy

히스토리에서 마지막 이 아닌 명령을 원하면 다음을 실행할 수 있습니다.

> history

다음과 같이 원하는 명령 번호를 참조하십시오.

> echo !5 | pbcopy

그것은 당신이 좋아하는 것일 수도 있고 효과가있을 수도 있지만 명령이 실제로 하는 일과 OP (5 년 전 답변 중 하나를 수락 한 사람)가 효과적으로 사용할 수있는 방법 에 대해 약간의 설명을 제공해야합니다 .
IconDaemon

@IconDaemon 좋은 전화. 프로필 사용자 정의가 필요하지 않기 때문에 허용 된 답변보다 간단하기 때문에 이전 질문에 추가 할 가치가 있다고 생각합니다.
Sam Berry

4

Sam Berry의 똑같은 대답을 생각해 냈지만 여기에는 효과가 없습니다 (OSX 10.14.6).

다음과 같이 따옴표로 묶었습니다 !!.

echo "!!" | pbcopy


3

공백으로 시작하는 명령을 무시하도록 내역을 설정할 수 있습니다.

export HISTIGNORE=' *'

그런 다음 다음 명령을 실행하여 마지막 명령을 클립 보드에 표시하십시오 (처음에 공백이 있는지 확인하십시오).

history 1 | cut -d " " -f 4- | pbcopy

그러면 기억하기 쉽도록 명령을 별명으로 저장하려고합니다.

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