Откройте новый терминал и исходные скрипты

Я хочу написать скрипт для активации виртуальной среды и запустить мой сервер для проекта Django в новом терминале. Мой startProject.sh это:

#!/bin/bash
source virtualenv/bin/activate
python manage.py runserver

И я могу запустить этот скрипт на моем текущем терминале:

source startProject.sh

Я хочу сделать это в новом терминале, открытом скриптом.

#!/bin/bash
gnome-terminal --working-directory=/home/myname/project -x 'source startProject.sh'

Я тоже это попробовал.

#!/bin/bash
gnome-terminal --working-directory=/home/myname/project -x '#!/bin/bash\n source startProject.sh'

Оба не работают. Зачем? Я прочитал другие вопросы, но я все еще не получил это. Я новичок, поэтому, пожалуйста, не принимайте никакого опыта.

1 ответ

Решение

По моему опыту команда должна быть:

gnome-terminal --working-directory='/home/<user>/project' -x bash -c "source startProject.sh; exec bash"

Заметки:

  • Путь --working-directory='/home/<user>/project' заключено в одинарные кавычки, если оно содержит специальные символы в качестве пробелов и т. д.

  • Опция -x означает: выполнить - остаток командной строки внутри терминала.

  • И наша команда bash -c "<commands>", Это означает, что мы выполняем новый bash оболочка, которая должна запускаться -c "<commands>",

  • У нас есть два разделенных (точкой с запятой ; == new line) <commands>,

  • Первая команда source startProject.sh будет источником файла сценария.

  • Вторая команда exec bash имеет смысл - оставаться открытым текущим gnome-terminal окно. Есть и другие возможные подходы к этому. В текущем случае команда exec заменит текущий образ процесса новым образом процесса - другими словами, он "убьет" текущий процесс и выполнит новый (bash) под текущим PID.

Дальнейшее чтение:

Другие вопросы по тегам