Jak otworzyć kilka kart terminalu w różnych folderach (katalogach roboczych)?

10

Chcę, aby jeden skrypt otworzył kilka kart w różnych folderach.

Podczas wyszukiwania znalazłem ten wpis, ale giełda, jak pokazano poniżej, otworzyła terminal z trzema kartami w moim katalogu domowym. Komunikat o błędzie pokazał:

Failed to parse arguments: Unknown option --execute=cd /some/thing/

Skrypt wygląda następująco:

#!/bin/sh
gnome-terminal --tab --execute="cd /some/thing/" \
          --tab --execute="cd /home/" \
          --tab --execute="cd /home/" \
exit 0

Odmiana z --working-directory = "/ some / thing /" również nie pomogła. Czy widzisz błąd?

Kerkdyk
źródło

Odpowiedzi:

8

Poniższe działa dla mnie w oniryce. Możesz użyć tego zamiast swojej wersji:

#!/bin/bash
gnome-terminal --tab  --working-directory="/var/www/" --tab --working-directory='/home/' --tab --working-directory='/home/'
exit 0
Richard Holloway
źródło
3

Twój konkretny błąd jest spowodowany niewłaściwym użyciem --executeopcji. Jeśli spojrzysz na fragment strony man poniżej, zauważysz, że --execute nie ma znaku równości wymienionego jako część składni, ponieważ po prostu wykonuje całą resztę wiersza poleceń. Przykładem prawidłowego użycia może być:

gnome-terminal --execute play '/home/cjohnson/Still Alive.mp3'

WAŻNA UWAGA: W każdym razie
używanie cdjest trochę specjalnym przypadkiem. cdnie jest jak większość poleceń - nie uruchamia własnego pliku binarnego / wykonywalnego. Jest interpretowany bezpośrednio przez bash(lub jakąkolwiek powłokę, której używasz). Dlatego próba wywołania cdnie zgadza się z flagami --executei -x(które wydają się chcieć bezpośrednio odrodzić proces potomny). Ten sam problem wystąpi (sprawdziłem) z innymi poleceniami, które są przetwarzane bezpośrednio przez bashlike home. Nawet przy prawidłowym użyciu, bez znaku równości, nadal spowoduje błąd: „Nie znaleziono pliku lub katalogu”. Dlatego użycie tej --working-directory=[DIRECTORY]opcji jest najlepszym wyborem do robienia tego, co chcesz.

KOLEJNA WAŻNA UWAGA:
Nawet gdyby tak nie było, nadal będziesz miał kłopoty. Problem polega na próbie skorzystania z --executeopcji, gdy rzeczywiście zamierzasz sens tej --commandopcji. W dokumentacji strony podręcznika jest to wyraźnie zaznaczone

-e, --command = STRING
Wykonaj argument tej opcji w terminalu.

-x, --execute
Wykonaj resztę wiersza poleceń wewnątrz terminala.

(moje podkreślenie)

Innymi słowy, prawdopodobnie nie będzie parsował tego w sposób, w jaki myślisz, że powinien. Użycie --executeuniemożliwia przekazanie dalszych opcji do gnome-terminal.

Fragment jednego z moich własnych skryptów, w którym uruchamiam wiele poleceń na osobnych kartach (zmieniono nazwy dla mojej prywatności / bezpieczeństwa):

gnome-terminal --tab --command="ssh cjohnson@GLaDOS" --tab --command="ssh drattman@GLaDOS"

(Nawiasem mówiąc, próba użycia --commandflagi z cdlub homespowoduje również znany błąd „Brak takiego pliku lub katalogu”).

Mam nadzieję, że to nie za długo. Po prostu staram się być dokładny.

Dain42
źródło