배쉬 기록을 에코하고 리디렉션하세요! 파일에 대한 명령

배쉬 기록을 에코하고 리디렉션하세요! 파일에 대한 명령

!명령을 통해 기록 명령을 스크립트 파일로 에코하고 리디렉션 할 수 있습니까 ? 내가 무시한 pipe, 또는 명령에 변경 사항이 있습니까 redirect?tee

  518  xmodmap -e "keycode 66 = Return"
  519  xmodmap -e "keycode 23 = Tab"
  535  xmodmap -e 'clear Lock' -e 'keycode 0x42 = Escape'

[Tech_Ministry@localhost ~]$ echo !535 && !518 >> xmodmap_-e.sh 
echo xmodmap -e 'clear Lock' -e 'keycode 0x42 = Escape' && xmodmap -e "keycode 66 = Return" >> xmodmap_-e.sh 
xmodmap -e clear Lock -e keycode 0x42 = Escape

이 글을 읽고 나면우편 엽서나는 노력했다echo !535:p && !518:p >> xmodmap_-e.sh

뭔가 간단한게 빠진거같은데.. 이게 가능할까요? 각 명령을 별도의 줄에 표시할 수 있습니까?

답변1

에서 help history:

  -p    perform history expansion on each ARG and display the result
    without storing it in the history list

예를 들어, 제가 주로 하는 일은 history -p \!572 >> myfile기록에서 명령 572를 저장하는 것입니다.

귀하의 예에서는 다음을 사용합니다.

echo "$(history -p '!535') && $(history -p '!518')" >> xmodmap_-e.sh

history단일 명령을 사용하여 이를 수행하는 방법이 있을 수 있습니다 .

(이렇게 하면 스크립트 파일의 한 줄에 두 명령이 &&연산자와 연결되어 배치됩니다.)


업데이트: 이 글을 쓰면서 내가 찾고 있는 더 간단한 형식은 다음과 같습니다.

history -p \!535 \!518 >> whatever.sh

답변2

기록 표시를 큰따옴표로 묶으면 확장을 따옴표 붙은 문자열로 캡처할 수 있습니다.

echo "!535 && !518" >> xmodmap_-e.sh 

게시된 시도가 실패한 이유는 &&참조되지 않아 조치가 취해졌기 때문입니다.

echo !535 && !518 >> xmodmap_-e.sh

이는 두 가지 명령으로 확장됩니다.

echo {the expansion of !535}
&&
{run the expansion of !518} >> xmodmap_-e.sh

따라서 첫 번째 확장이 작성됩니다.표준 출력, 해당 작업이 echo성공하므로 두 번째 작업이 실행되고 이후의 모든 출력이 파일에 추가됩니다 xmodmap_-e.sh.

관련 정보