ДВУ;
Воспользуйся 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
в этом случае.
Связанный:
- Вот почему мне ДЕЙСТВИТЕЛЬНО нужна была эта информация! Это мой "другой ответ", о котором я упоминал выше: Откройте терминал с несколькими вкладками и запустите приложение