나는 종종 서브 쉘을 사용하여 명령을 실행하고 때로는 무언가를 실행하기 전에 서브 쉘을 확장하고 싶습니다. 이런 방식으로 내가하고있는 일을 확인하고 일어날 일을 편집 할 수 있습니다.
예를 들어, 다음 명령 줄을 실행하기 전에 확장하여 서브 쉘의 결과를 편집하려면 어떻게해야합니까?
예 :
$ 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
\eg
glob-expand-word
\C-x*
답변
다음은 편리한 트릭입니다. ~ / .inputrc에이 줄을 추가하십시오 (필요한 경우 파일 작성).
Control-X : 쉘 확장 라인
다음 중 하나만 사용하여 내역 만, 별칭 또는 둘 다를 확장 할 수 있습니다.
Control-X : 히스토리 확장 라인
또는
Control-X : 별칭 확장 라인
또는
Control-X : 히스토리 및 앨리어스 확장 라인
이는 수집 된 이 블로그에서 , 그리고 슈퍼 유저에이 질문에 매우 유사합니다 :