Kiedy gnome-terminal rozpoczął bash, jest poza pętlą, jeśli chodzi o wykonywanie poleceń: zarządza tylko wejściem i wyjściem. Więc potrzebujesz współpracy bash, aby uruchomić coś po ~/.bashrc
załadowaniu.
Po pierwsze, w wielu przypadkach nie trzeba wykonywać poleceń później ~/.bashrc
. Na przykład otwarcie terminala w określonym katalogu można po prostu zrobić cd /foo/bar && gnome-terminal
. Można ustawić zmienne środowiskowe w podobny sposób: VAR=value gnome-terminal
. (Jeśli ~/.bashrc
przesłaniasz zmienne środowiskowe, robisz to źle: należą do nich definicje zmiennych środowiskowych~/.profile
)
Aby wykonać polecenia w terminalu, ale wcześniej ~/.bashrc
możesz to zrobić
gnome-terminal -x sh -c 'command1; command2; exec bash'
Jeśli chcesz korzystać z wielu kart, musisz użyć -e
zamiast -x
. Gnome-terminal nieprzydatnie rozdziela argument -e
spacji zamiast wykonywać go przez powłokę. Niemniej jednak możesz napisać polecenie powłoki, jeśli upewnisz się, że nie ma w nim spacji. Przynajmniej w gnome-terminal 2.26 można jednak używać tabulatorów (zastąpić <TAB>
literalnym znakiem tabulacji):
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'
Jeśli trzeba uruchamiać polecenia po ~/.bashrc
, uczynić go uruchomić polecenia. Na przykład dołącz następujący kod na końcu ~/.bashrc
:
eval "$BASH_POST_RC"
Następnie uruchom jakiś kod po (naprawdę na końcu) twojego bashrc:
gnome-terminal -x sh -c BASH_POST_RC=\''command1; command2'\''; exec bash'
lub (mniej obciążające cytowanie)
BASH_POST_RC='command1; command2' gnome-terminal
Chociaż nie polecam robić tego w ten sposób, możesz być zainteresowany technikami wymienionymi w
Jak uruchomić terminal z pewnym tekstem wprowadzonym już w wierszu poleceń? .
gnome-terminal --geometry=198x44 --working-directory=/home/username/Workspace/project_name --tab --title server -e 'zsh -c "export BASH_POST_RC=\"rails server\"; exec zsh"' --tab --title console -e 'zsh -c "export BASH_POST_RC=\"rails console\"; exec zsh"'
gnome-terminal -e
ogóle nie wywołuje powłoki. Jeśli uruchomiszgnome-terminal -e 'sleep 9'
, spowoduje to wykonanie poleceniasleep
z argumentem9
i nie będzie dotyczyła powłoki. Jeśli wykonaszgnome-terminal -e 'sleep 9;bash'
polecenie, terminal natychmiast się otworzy i zamknie, ponieważsleep
narzeka, że9;bash
nie jest to prawidłowy przedział czasu. Możesz obserwować, co się dziejestrace -f -eexecve gnome-terminal -e …
Kiedy użyjesz tej
-e
opcjignome-terminal
, uruchomi to polecenie bez uruchamiania nowej powłoki (możesz nawet uruchomić coś takiego:)gnome-terminal -e gedit
, więc jeśli chcesz uruchomić polecenie wbash
powłoce w nowym terminalu / karcie, musisz zrobić coś takiego:Należy jednak pamiętać, że po
"command"
zakończeniu terminal / karta również się zakończy.źródło
gnome-terminal -x bash -c "command"
(-e
oczekuje jednego argumentu). I dość łatwo jest później wykonać powłokęcommand
, przynajmniej tak długo, jak zaczynasz jedną kartę - zobacz moją odpowiedź .gnome-terminal -x "bash" -c "command"
pracował dla mnie. Uwaga cytuje wartość -x arg.# Option “-x” is deprecated and might be removed in a later version of gnome-terminal.
`-x
i-e
optony są przestarzałe?~/.bashrc
przed wykonaniem polecenia, jak pierwotnie poprosił OP.