Как отправить много команд в оболочку и ждать команды за концом [закрыто]

16

У меня около 20 команд, и я должен отправить все это в оболочку Unix и скопировать результат, но я не знаю, как это сделать.

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

Команда 1 - Соединиться с сервером.

Дождитесь окончания команды 1

Команда 2 - обновить всю информацию с сервера 1

Подождите.

Команда 3 . Получите некоторый параметр.

... и другие подобные команды

Я пытался с cmd1 | cmd2 | cmd3 и cmd1 & cmd2 & cmd3 иcmd1;cmd2

Проблема в том, что cmd1он подключен к RNC (элемент сети) и занимает около 15 секунд, после этого cmd2имеет смысл. но просто работай для первого cmd. Любая подсказка, как запустить это?

Джонатан Рауль Тапия Лопес
источник
3
Использовать скрипт? Или &&между командами.
Бернхард

Ответы:

20

Обычно просто cmd1;cmd2;cmd3;cmd4(если вы хотите написать это в одну строку), или использовать, cmd1 && cmd2 && cmd3 && cmd4если вы не хотите запускать cmd3, когда cmd2 не удается.

В качестве альтернативы ;вы можете просто написать одну команду на строку.

cmd1
cmd2
cmd3
cmd4

Если вы хотите, чтобы команды выполнялись параллельно в фоновом режиме, вы также можете использовать

cmd1 &
cmd2 &
cmd3 &
cmd4 &
wait # for cmd1-4 to finish

Любой из этих методов также может быть помещен в сценарий оболочки. Существует небольшая разница между тем, что вы пишете в сценарии оболочки, и тем, что вы пишете в самой оболочке.

frostschutz
источник
ММ проблема его, когда я посылаю cmd1, это действительно должно закончиться около 6 секунд, проблема его, когда он отправляет cmd2 и cmd1, он все еще обрабатывает, это терпит неудачу.
Джонатан Рауль Тапия Лопес
4
В этом cmd1;cmd2случае (или cmd1 && cmd2в этом отношении) cmd2 не будет работать до тех пор, пока cmd1 не выйдет (и, следовательно, предположительно завершится). Так что не должно быть никаких проблем - пожалуйста, перефразируйте свой вопрос или приведите пример, который люди действительно могут воспроизвести.
frostschutz
Хорошо, я собираюсь изменить вопрос. спасибо
Джонатан Рауль Тапия Лопес
2

Вы можете посмотреть sleep, если ваша среда позволяет это. Полная последовательность будет что-то вроде cmd1 && sleep 10s && cmd2.
Вот соответствующая справочная страница для сна .

LoicAG
источник
Режим сна / ожидания полезен только в том случае, если вы определенно знаете, сколько времени занимает завершение и выход предыдущей программы (которая может порождать фоновый процесс) (IE The Halting Problem) ИЛИ если вы гарантируете, что хотите прервать и запустить вторую команду после интервала прошло, что может произойти, если эти два асинхронных, но вы все еще хотите некоторое время между ними. Скорее всего, это не то, что вы хотите. На практике это может сработать. Но это не надежно.
Джастин Ривз
1

Просто используйте скрипт, файл, содержащий команды для запуска одна за другой, например:

#!/bin/sh

command-01
command-02
...
command-20

В первой строке (shebang) указывается запускать следующие команды с помощью /bin/sh, сделать файл исполняемым ( chmod u+x your-little-script), после чего вы можете запустить его ./my-little-script. Таким образом, вы не оставите некоторый шаг ;-)

Прочитайте руководство по оболочке, оно предоставляет полный язык программирования. Проверьте, bash(1)если это то, что доступно, или же оболочка Korn ksh(1). Они предлагают множество полезных функций для управления потоком управления в сценариях (или в этом отношении интерактивно).

vonbrand
источник
Спасибо, но я не могу использовать скрипты.
Джонатан Рауль Тапия Лопес
Почему? В любом случае, если это не очень фашистская среда, вы должны иметь возможность написать сценарий: source your-little-script(или . your-little-scriptдля краткости).
vonbrand
Потому что у меня нет прямого доступа к системе Unix, которая у меня есть, как у мини-программы, которая просто разрешает выполнять cmd в строках и получать результат с помощью scream, а для использования, которое я собираюсь использовать с этими командами, нецелесообразно использовать scrips.
Джонатан Рауль Тапия Лопес
Хорошо, это немного проясняет ситуацию ... Какова среда происхождения / назначения ваших команд? Что вы используете для отправки команд для выполнения? Что такое удаленная среда? Каковы ваши настройки (есть ли у вас обычная учетная запись, к которой вы можете получить доступ через sshPuTTY
нее
-1

Вы можете запустить что-то вроде этого expectна своем локальном компьютере, чтобы отправить cmd1и дождаться его завершения перед выдачей cmd2и т. Д. Вы должны определить разумный период ожидания или определенный вывод, который указывает, что команда выполнена, чтобы написать правильную Ожидайте сценарий.

Разумеется, cmd1; cmd2; cmd3; cmd4в одной команде команды будут выполняться последовательно, одна за другой.

tripleee
источник