프로그래밍 방식으로 gnome 터미널을 열고 bashrc가 실행된 후 명령을 실행합니다.

프로그래밍 방식으로 gnome 터미널을 열고 bashrc가 실행된 후 명령을 실행합니다.

개발 환경을 시작하기 위해 작은 스크립트를 작성했습니다. 한 부분은 자동으로 일부 명령을 실행해야 하는 여러 탭이 있는 gnome 터미널을 여는 것입니다. 이러한 명령 중 일부는 이미 실행된 .bashrc에 따라 달라집니다. 하지만 사용시

gnome-terminal --tab -e "명령" --tab --tab

.bashrc가 실행되기 전에 명령이 실행됩니다. 자동화된 gnome-terminal -e를 수동으로 사용하는 것처럼 동작하게 할 수 있습니까? ("cd /foo/bar"와 같은 명령도 gnome-terminal -e에서는 작동하지 않습니다)

답변1

gnome-terminal이 bash를 시작하면 명령 실행과 관련된 루프에서 벗어나 입력과 출력만 관리합니다. 따라서 ~/.bashrc로드된 후 무언가를 실행하려면 bash의 협력이 필요합니다 .

첫째, 대부분의 경우 실제로는 이후에 명령을 실행할 필요가 없습니다 ~/.bashrc. 예를 들어, 특정 디렉토리에서 터미널을 여는 것은 cd /foo/bar && gnome-terminal. 비슷한 방법으로 환경 변수를 설정할 수 있습니다 VAR=value gnome-terminal. (환경 변수를 재정의하면 ~/.bashrc잘못한 것입니다.환경 변수 정의는 다음에 속합니다.~/.profile)

터미널에서 명령을 실행하려면 이전에 다음을 ~/.bashrc수행할 수 있습니다.

gnome-terminal -x sh -c 'command1; command2; exec bash'

여러 탭을 사용하려면 -e대신 을 사용해야 합니다 -x. Gnome-terminal은 -e쉘을 통해 실행하는 대신 at space 의 인수를 유용하지 않게 분할합니다 . 그럼에도 불구하고 공백을 포함하지 않는 경우 쉘 명령을 작성할 수 있습니다. 적어도 gnome-terminal 2.26에서는 탭을 사용할 수 있습니다( <TAB>리터럴 탭 문자로 대체).

gnome-terminal -e 'sh -c command1;command2;exec<TAB>bash'
gnome-terminal --tab -e 'sh -c command1;<TAB>exec<TAB>bash' \
               --tab -e 'sh -c command2;<TAB>exec<TAB>bash'

이후에 명령을 실행해야 하는 경우 ~/.bashrc다음을 수행하십시오.그것명령을 실행하십시오. 예를 들어, 끝에 다음 코드를 포함합니다 ~/.bashrc.

eval "$BASH_POST_RC"

그런 다음 bashrc 뒤에 (실제로 끝에서) 일부 코드를 실행하려면 다음을 수행하십시오.

gnome-terminal -x sh -c BASH_POST_RC=\''command1; command2'\''; exec bash'

또는 (인용이 덜 무겁습니다)

BASH_POST_RC='command1; command2' gnome-terminal

이 방법을 특별히 권장하지는 않지만, 다음에 언급된 기술에 관심이 있을 수 있습니다. 명령줄에 이미 입력된 특정 텍스트로 터미널을 시작하는 방법은 무엇입니까?.

답변2

-e옵션을 사용하면 gnome-terminal새 셸을 시작하지 않고 해당 명령이 실행됩니다(다음과 같이 실행할 수도 있음 gnome-terminal -e gedit). 따라서 셸에서 새 터미널/탭으로 명령을 실행하려면 bash다음과 같이 해야 합니다.

gnome-terminal -x bash -c "command"

그러나 "command"종료되면 터미널/탭도 종료됩니다.

관련 정보