프로그래밍 방식으로 gnome 터미널을 열고 bashrc가 실행 된 후 명령을 실행하십시오. 명령을 실행해야하는 여러 개의 탭이있는 그놈

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

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

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



답변

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. 그놈 터미널 -e은 쉘을 통해 실행하지 않고 공백에서 인수를 무의식적으로 나눕니다 . 그럼에도 불구하고 공백을 포함하지 않으면 쉘 명령을 작성할 수 있습니다. (대체하지만 그놈 터미널 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

비록 이런 식으로 그렇게하지 않는 것이 좋지만 , 명령 행에 이미 입력 된 특정 텍스트로 터미널을 시작하는 방법에 언급 된 기술에 관심이 있으
십니까? .


답변

당신이 사용하는 경우 -e옵션을 gnome-terminal(당신도 뭔가를 실행할 수있는 새로운 쉘을 시작하지 않고 해당 명령을 실행 gnome-terminal -e gedit하면로 명령을 실행하려는 그렇다면) bash당신이 뭔가를해야 할 새로운 터미널 / 탭에 쉘 :

gnome-terminal -x bash -c "command"

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