개발 환경을 시작하기 위해 작은 스크립트를 작성했습니다. 한 부분은 자동으로 일부 명령을 실행해야 하는 여러 탭이 있는 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"
종료되면 터미널/탭도 종료됩니다.