Я пытаюсь открыть 4 терминала Windows при запуске и для этого использую приведенный ниже скрипт. Тем не менее, он открывает только 1 оконное окно вместо 4.
/bin/sh -c gnome-terminal; /bin/sh -c gnome-terminal; /bin/sh -c gnome-terminal; /bin/sh -c gnome-terminal
Я запускаю скрипт из «Автозагрузки приложений». Если я запускаю скрипт вручную из окна терминала, он открывает 4 окна терминала.
Так вот мой вопрос. Почему сценарий открывает только 1 окно из «Startup Applications», когда он должен открывать 4?
Вам не нужно /bin/sh -c
при выполнении его из сценария. Кроме того, используйте &
вместо ;
, как так
#!/bin/bash
gnome-terminal -t WINDOW-ONE &
gnome-terminal -t WINDOW-TWO &
gnome-terminal -t WINDOW-THREE &
gnome-terminal -t WINDOW-FOUR &
я верю причине, почему она ведет себя как он, делает в Вашем исходном сценарии, то, потому что оболочка ожидает каждой строки сценария для завершения сначала, таким образом, она ожидает первого окна, которое будет сделано. С & Вы разъединяете терминал гнома от сценария, и сценарий может перейти к следующей строке. Надежда, которая имеет смысл
Вам не нужен отдельный сценарий для открытия четыре gnome-terminal
окна, можно просто объединить их в одну команду, чтобы быть добавленными для Запущения Приложений.
, Когда Вы добавляете команду для Запущения Приложений, она на самом деле создает .desktop
файл в ~/.config/autostart
, который работает команда на запуске (на самом деле входят в систему). Синтаксис для сложных команд, которые будут использоваться в .desktop
файл, следующие:
/bin/bash -c "<complicated_command>"
Однако: только необходимо использовать /bin/bash -c
единственный время, таким образом, полная команда должна быть похожей:
/bin/bash -c "gnome-terminal&gnome-terminal&gnome-terminal&gnome-terminal"
Выполнение так, Вам не нужен отдельный сценарий, чтобы сделать задание.
Как уже упомянутый, необходимо объединить команды в цепочку с &
, не с ;
.
От man bash
:
, Если команда завершается оператором управления & оболочка выполняет команду в фоновом режиме в подоболочке. Оболочка не ожидает команды для окончания, и статус возврата 0. Команды разделяются a; выполняются последовательно; оболочка ожидает каждой команды для завершения в свою очередь. Статус возврата является статусом выхода последней выполняемой команды.