실행하기 전에 서브 쉘을 확장 하시겠습니까? 서브 쉘을 사용하여 명령을 실행하고 때로는 무언가를

나는 종종 서브 쉘을 사용하여 명령을 실행하고 때로는 무언가를 실행하기 전에 서브 쉘을 확장하고 싶습니다. 이런 방식으로 내가하고있는 일을 확인하고 일어날 일을 편집 할 수 있습니다.

예를 들어, 다음 명령 줄을 실행하기 전에 확장하여 서브 쉘의 결과를 편집하려면 어떻게해야합니까?

예 :

$ find -name "test.txt"
/tmp/test.txt

$ mv $(!!) /tmp/new.txt

명령을 실행 하기 전에 서브 쉘이 확장 된 것을보고 싶습니다 .

$ mv /tmp/test.txt /tmp/new.txt

이것을 할 수있는 방법이 있습니까?



답변

shell-expand-line( \e\C-e)는 bash에서 명령 대체를 확장합니다.

$ bind -p|grep shell-ex
"\e\C-e": shell-expand-line

$(!!)\e\C-e 이전 명령을 다시 실행하고 출력을 삽입하십시오.

"\eo": "$(!!)\e\C-e"

또한 다른 명령 대체를 확장하지만과 같은 명령은 없습니다 shell-expand-word.

bash 4.0 이상 에서는 ( ) 또는 ( )를 활성화 globstar, 입력 **/file.txt및 사용할 수도 있습니다 .glob-complete-word\egglob-expand-word\C-x*


답변

다음은 편리한 트릭입니다. ~ / .inputrc에이 줄을 추가하십시오 (필요한 경우 파일 작성).

Control-X : 쉘 확장 라인

다음 중 하나만 사용하여 내역 만, 별칭 또는 둘 다를 확장 할 수 있습니다.

Control-X : 히스토리 확장 라인

또는

Control-X : 별칭 확장 라인

또는

Control-X : 히스토리 및 앨리어스 확장 라인

이는 수집 된 이 블로그에서 , 그리고 슈퍼 유저에이 질문에 매우 유사합니다 :