Сценарий оболочки для изменения каталога терминала и открытия второго терминала

Я новичок в написании сценариев оболочки, и я пытаюсь написать сценарий на CD в папку, где мои программы сохраняются для одного из моих классов, а затем открыть второй терминал, чтобы ssh на сервер, используемый для тестирования программ, которые я пишу , Проблема в том, что я не могу найти способ изменить каталог оболочки терминала, где хранятся мои программы.

#!/bin/bash/ gnome-terminal -e "ssh user@foo.bar.edu"; cd /path/to/dir 

проблема в том, что рабочий каталог не изменяется после завершения сценария (он остается таким, какой был при вызове сценария). Я пробовал называть его, кроме как с помощью. перед именем сценария, чтобы заставить его работать в текущем процессе, но второй терминал никогда не открывался.

Я попытался сделать то же самое, что и выше, кроме того, что я заменил третью строку

 gnome-terminal -e "cd /path/to/dir/"; 

так что откроются два терминала, но терминал на CD к пути дал ошибку в строках «была ошибка создания дочернего процесса для этого терминала: не удалось выполнить дочерний процесс« cd »»

может ли кто-нибудь помочь мне разобраться, как решить эту проблему?

Ваша первая версия сначала открывает gnome-terminal , ждет, пока вы его не закроете, а затем измените на новый каталог.

Вторая версия пытается запустить команду cd вместо оболочки, однако cd – это не настоящая команда, а встроенная оболочка. (См. type -a cd для этого.)

Вопрос в том, как gnome-terminal решает, какой каталог будет отображаться. Обычно он будет использовать текущий рабочий каталог, если он не переопределяется --working-directory .

Поэтому вы можете использовать:

 cd /path/to/dir && gnome-terminal 

или

 gnome-terminal --working-directory=/path/to/dir 

Посмотрите на man gnome-terminal для доступных опций.

Для части ssh вам нужно решить, хотите ли вы запускать вы гном-терминал на локальной или удаленной стороне. Чтобы запустить его на удаленном сайте, который вы используете:

 ssh -X user@foo.bar.edu gnome-terminal --working-directory=/path/to/dir 

для местной стороны вы можете использовать что-то вроде:

 gnome-terminal -e "ssh -t user@foo.bar.edu bash -c 'cd /path/to/dir && bash -l'"; 

Рабочий каталог остался бы изменен, если вы запустили скрипт с точкой (пробелом) перед именем скрипта.

Например, я использую одно имя pj, которое перемещает меня в каталог python для проектов. Он содержит эти две строки:

 #!/bin/bash cd /home/pi/python 

Я сделал его исполняемым, а затем скопировал его в / usr / sbin, где он находится на моем $ PATH.

Чтобы запустить его, я печатаю:

 . pj (note the dot and the space) 

И вуаля, она переходит в этот каталог и оставляет меня там.
Не может быть проще.