나는 종종 서브쉘을 사용하여 명령을 실행하고 때로는 무언가를 실행하기 전에 서브쉘을 확장하고 싶습니다. 이렇게 하면 내가 하고 있는 일을 확인할 수 있고 앞으로 일어날 일도 편집할 수 있습니다.
예를 들어, 다음 명령줄을 실행하기 전에 확장하여 하위 셸의 결과를 편집하려면 어떻게 해야 합니까?
예를 들어
$ find -name "test.txt"
/tmp/test.txt
$ mv $(!!) /tmp/new.txt
서브쉘이 확장된 것을 보고 싶습니다.~ 전에다음과 같이 명령을 실행합니다.
$ mv /tmp/test.txt /tmp/new.txt
이를 수행할 수 있는 방법이 있습니까?
답변1
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*
답변2
다음은 편리한 방법입니다. ~/.inputrc에 다음 줄을 추가하세요(필요한 경우 파일 생성).
Control-x: 쉘 확장 라인
기록만 확장하거나 별칭을 확장하거나 둘 다를 확장하려면 다음 중 하나를 수행할 수도 있습니다.
Control-x: 기록 확장 라인
또는
Control-x: 별칭 확장 라인
또는
Control-x: 기록 및 별칭 확장 라인
이건 모은거였어이 블로그에서, 그리고슈퍼유저에 대한 이 질문, 이는 매우 유사합니다.