2016-04-17 7 views
1

Я пытаюсь создать очень простой сценарий оболочки, который открывает и запускает пять экземпляров моей программы. С партией, я хотел бы сделать что-то вроде этого:Сценарий оболочки: открыть несколько терминалов и запустить команды?

@echo off 
python webstore.py 55530 
python webstore.py 55531 
python webstore.py 55532 
exit 

Это откроет три терминала и выполнения команд на каждый из них с разным параметром командной строки. Как я могу создать то же самое со сценарием оболочки, который работает на каждой платформе на основе unix? Я видел некоторые команды для открытия терминалов, но они специфичны для платформы (gnome-termial, xterm и т. Д.).

+0

Я не знаю идеальных решений для этого. Вы можете получить оболочку по умолчанию через переменную среды '$ SHELL', но открытие нового терминала - это не то же самое, что открытие нового окна терминала * - открытие новой оболочки с помощью' exec '$ SHELL "' не должно открывать новую окно. Вы можете сделать «sudo apt-get install xdotool» и «xdotool key ctrl + shift + n' - это может быть несколько« кросс-дистрибутив »-решения, так как большинство оконных менеджеров поддерживают ctrl + shift + n для открытия новых окон. – jDo

+0

Check [ это] (https://askubuntu.com/questions/641683/how-can-i-send-commands-to-specific-terminal-windows) out (используя xdotool для открытия трех окон терминала и отправки команд им) – jDo

ответ

1

Как создать то же самое со сценарием оболочки, который работает на каждой платформе на основе unix?

То, о чем вы просите, немного необоснованно. Подумайте об этом так: в Windows вы всегда находитесь внутри своего Desktop Window Manager, периода, и единственный выбор у вас есть между Powershell и cmd.exe. Но на Linux, это немного сложнее:

  1. Как вы сказали, что вы можете иметь либо rxvt или xterm установлен.
  2. Это не единственный вопрос - вы можете использовать любой оконный менеджер. Хотя это не имеет большого значения здесь,
  3. Вы можете использовать Xorg или Wayland. Продолжение дальше,
  4. Вы не можете использовать какую-либо графическую среду вообще, например. запустите все в консоли Linux! Что, если вы не используете причудливые программы, такие как fbterm или tmux, в значительной степени неспособны к многозадачности, но в одиночку порождают новые окна.
  5. Это, как говорится, вы даже не можете использовать этот компьютер физически вообще, потому что вы подключаетесь к нему из SSH. Здесь нет удаленных окон (если вы не используете материал как переадресацию X11).
  6. Наконец, вы можете использовать zsh, bash, sh, fish и т. Д., Что все они имеют свои особенности.

IMO Ваш лучший выбор, чтобы проверить в сценарии, где устанавливаются программы или сценария вокруг терминального мультиплексора, такие как tmux и требуют его установки на целевом компьютере. tmux в действии:

tmux in action

(. Это будет работать в любой SSH, консоли Linux или любой другой сценарий выше)

Если вы, однако, не заботятся о выходе команд, «повторно собирается бежать, вы можете просто отделить их от текущего сеанса терминала, как это:

command1 &>/dev/null & 
command2 &>/dev/null & 
command3 &>/dev/null & 

Помните, что это:

  1. Выполняет команды параллельно.
  2. Не покажет вам никакого выхода. Если вы удалите &>/dev/null, выходные данные каждой команды будут переплетаться друг с другом, что, вероятно, не то, что вы хотите.
  3. Закрытие терминала обычно убивает его дочерние процессы, которые в этом случае убьют ваши command экземпляры, которые работают в фоновом режиме.

Вопросы, о которых говорилось выше, могут быть обработаны, но я считаю, что это немного выходит за рамки этого ответа.

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

+0

Point 2 в последнем списке можно решить, используя 'nohup', не так ли? –

+0

Да, но я считаю, что это немного выходит за рамки вопроса - я просто хотел кратко представить возможные варианты OP, не вдаваясь в подробности. –

Смежные вопросы