Як надіслати багато команд для оболонки і чекати, коли команда за кінцями [закрита]


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

Будь-який із цих методів також може бути поміщений у сценарій оболонки. Існує невелика різниця між тим, що ви пишете в сценарії оболонки, і тим, що ви пишете в самому оболонці.


MM проблема його, коли я надсилаю cmd1, це дійсно доведеться закінчити близько 6 секунд, проблема, коли він надсилає cmd2 і cmd1, все ще обробляє його не вдається.
Джонатан Раул Тапія Лопес

4
У cmd1;cmd2випадку (або cmd1 && cmd2з цього приводу) cmd2 не буде працювати, поки cmd1 не завершиться (і, таким чином, імовірно, закінчено). Тож не повинно виникнути жодних проблем - перефразуйте своє запитання або наведіть приклад, який люди можуть насправді відтворити.
frostschutz

Гаразд, я можу змінити питання. спасибі
Джонатан Раул Тапія Лопес

2

Ви можете заглянути sleep, якщо ваше середовище це дозволяє. Повна послідовність тоді буде чимось на кшталт cmd1 && sleep 10s && cmd2.
Ось відповідна сторінка для сну .


сон / очікування корисний лише в тому випадку, якщо ви детерміновано знаєте, скільки часу триває попередня програма (яка може породити фоновий процес), щоб закінчити і вийти (IE The Problem Stoping) АБО якщо ви гарантуєте, що хочете перервати та запустити другу команду після інтервалу пройшло, що може трапитися, якщо вони двоє асинхронні, але ви все ще хочете пройти між ними. Швидше за все, це не те, що ви хочете. Практично кажучи, це може спрацювати. Але це не є надійним.
Джастін Рівз

1

Просто використовуйте скрипт, файл, що містить команди для запуску одна за одною, наприклад:

#!/bin/sh

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

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

Прочитайте посібник для оболонки, він пропонує повну мову програмування. Перевірте, bash(1)чи є те, що є в наявності, або ж оболонка Корна ksh(1). Вони пропонують безліч корисних функцій для управління потоком управління в скриптах (або в інтерактивному плані з цього приводу).


Дякую, але я не можу використовувати scritps.
Джонатан Раул Тапія Лопес

Чому? У будь-якому випадку, якщо це не дуже фашистське середовище, ви повинні мати можливість джерела сценарію: source your-little-script(або . your-little-scriptкоротко).
vonbrand

Тому що я не маю прямого доступу до системи Unix, мені подобається міні-програма, яка просто дозволяє виконувати cmd у рядках і отримувати результат за допомогою крику, а для використання, що я буду використовувати за допомогою цих команд, це не практично для використання скриптів.
Джонатан Раул Тапія Лопес

Гаразд, це трохи прояснює речі ... Яке середовище - це походження / призначення ваших команд? Що ви використовуєте для доставки команд для виконання? Що таке віддалене середовище? Яке налаштування там (у вас є звичайний обліковий запис, до якого ви можете отримати доступ sshчи, PuTTYможливо,
vonbrand

-1

Ви можете запустити щось на зразок expectна своєму локальному комп’ютері для надсиланняcmd1 і чекати, коли це закінчиться перед видачею cmd2і т. Д. Ви повинні з'ясувати розумний період очікування або конкретний вихід, який вказує на те, що команда виконана, щоб написати належну команду Очікуйте сценарій.

Звичайно, cmd1; cmd2; cmd3; cmd4в одній команді будуть виконувати команди послідовно, одна за одною.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.