ДВУ;
Воспользуйся exec bash; или exec $SHELL; в конце команды, чтобы сохранить терминал открытым после выполнения команды.
Подробная информация и пример тестового кода
Там нет ответа, показывающего exec bash как правильный ответ, но он должен быть, так что вот он. Этот ответ частично заимствован из Ответ @Karsvo, Ответ @Стефано Палазо, и комментарий @Andrea Corbellini под ответом Стефано.
В моей системе (в последний раз это было протестировано и проверено на Ubuntu 20.04), echo $SHELL показывает, что переменная ОБОЛОЧКИ содержит /bin/bash. which bash показывает, что bash исполняемый файл находится в /usr/bin/bash, однако. но, /user/bin/bash и /bin/bash являются идентичными исполняемыми файлами, что подтверждается наличием одинакового sha256sum:
$ which bash/usr/bin/bash$ sha256sum $(which bash)04a484f27a4b485b28451923605d9b528453d6c098a5a5112bec859fb5f2eea9 /usr/bin/bash$ sha256sum $SHELL04a484f27a4b485b28451923605d9b528453d6c098a5a5112bec859fb5f2eea9 /bin/bash
Поэтому, используя bash на месте $SHELL идентичен. Кроме того, я определил, что все 3 из них в конце будут держать терминал открытым: bash, eval bash, exec bash, но только последнее, exec bash, затем позволит вам закрыть терминал без предупреждения о том, что процесс все еще запущен. Поэтому лучше всего использовать exec bash или exec $SHELL, как говорит @AndreaCorbellini в своем комментарии.
Тест 1: это будет работать так, как ожидалось
Вот как это может выглядеть в случае использования скрипта для открытия двух новых gnome-terminal вкладки уже cdэд в твой ~/some_dir каталог:
Добавьте в нижнюю часть вашего ~/.bashrc файл:
open_default_tabs() { gnome-terminal --tab -- bash -ic "cd ~/some_dir; exec bash;" gnome-terminal --tab -- bash -ic "cd ~/some_dir; exec bash;"}
ИЛИ: опять же, вы можете использовать exec $SHELL здесь вместо этого также:
open_default_tabs() { gnome-terminal --tab -- bash -ic "cd ~/some_dir; exec $SHELL;" gnome-terminal --tab -- bash -ic "cd ~/some_dir; exec $SHELL;"}
Затем в любом уже открытом gnome-терминале повторно запустите свой ~/.bashrc файл с . ~/.bashrc, затем запустите эту команду с помощью:
open_default_tabs
... и вы увидите свою исходную вкладку gnome-terminal плюс две новые вкладки, причем обе из двух новых вкладок уже cdэд вошел в ~/some_dir каталог.
Если вы удалите exec bash; или exec $SHELL; часть из конца каждой из приведенных выше команд, однако, затем повторно создайте свой ~/.bashrc файл с . ~/.bashrc, затем запустите open_default_tabs повторите команду, и вы увидите, что вкладки мигают, открываясь, а затем сразу же закрываются. Все, что вы увидите, - это пара быстрых вспышек. То exec bash; или exec $SHELL; часть в конце необходима для того, чтобы эти новые вкладки оставались открытыми.
Тест 2: это доказывает, что exec bash; работает. НО поведение в отношении gnome-terminal это не совсем так, как ожидалось. Чтобы решить эту проблему, посмотрите мой более сложный ответ и обходной путь в моем другом ответе здесь.
В test.sh:
gnome-terminal --tab -- bash -ic "cd ~/some_dir; exec bash;"gnome-terminal --tab -- bash -ic "cd ~/some_dir; exec bash;"
Обеспечивать some_dir существует, и сделать test.sh выполнимый:
mkdir -p ~/some_dirchmod +x test.sh
Запустите его:
./test.sh
Обратите внимание на два окна (в данном случае не вкладки, из-за проблемы в gnome-terminal) , которые были только что открыты оставайтесь открытыми. Удалить exec bash; выше, и вы увидите, что они этого не делают - они мгновенно закрываются - так быстро, что вы даже не увидите, как они открываются. Это доказывает exec bash; работает отлично. То gnome-terminal поведение не совсем такое, как ожидалось, но это не имеет никакого отношения к exec bash;, который работает просто отлично. Опять же, смотрите мой другой ответ здесь для полного решения проблемы, специфичной для gnome-terminal в этом случае.
Связанный:
- Вот почему мне ДЕЙСТВИТЕЛЬНО нужна была эта информация! Это мой "другой ответ", о котором я упоминал выше: Откройте терминал с несколькими вкладками и запустите приложение