Як запустити послідовність скриптів bash по одному в Linux?


1

У мене є кілька bash-скриптів, а точніше один сценарій, який потрібно запустити кілька разів.

Цей скрипт приймає кілька аргументів командного рядка і щось робить з ними. Мені потрібно запустити цей скрипт кілька разів послідовно, передаючи різні значення аргументу. Проблема полягає в тому, що цей сценарій дуже довгий і на його виконання потрібно багато часу.

Я хочу запустити цей сценарій один раз, з деякими аргументами. Тоді я хочу запустити цей скрипт ще раз, передаючи цього разу різні значення аргументів.

Мені потрібно дати вранці свої готові результати своєму начальнику. Одним з рішень було б просто запустити сценарій один раз, а потім сидіти за комп’ютером всю ніч, чекаючи, коли він закінчиться, а потім запустити сценарій ще раз. Але недосипання - це не варіант для мене.

Чи є спосіб автоматизувати виконання сценаріїв із заданими значеннями аргументів? До речі, мені потрібно бачити не лише вихід скриптів як кінцевий результат, а й сценарій, як він переданий у командний рядок з відповідними аргументами.

Можливо, було б краще подивитися на це зображення, щоб краще зрозуміти моє запитання.

скріншот


Можливо, вас зацікавить команда bash wait(див. man bashАбо help waitз bash), напевно, тут не потрібна, але вона дочекається завершення процесу / PID або всіх дітей
Xen2050

Відповіді:


1

Найпростіший спосіб запустити одну команду за іншою - просто використовувати; Подібно до:

command1 --options;command2 --options;command3 --options

Якщо ви хочете пропустити запущені команди, якщо попередня не вдалася, ви можете зробити це за допомогою &&:

 command1 --options && command2 --options && command3 --options

На відміну від pipe (|) або ampersand (&), крапка з комою очікує завершення команди перед виконанням наступної команди.


0

Вам потрібна forпетля:

cd ~/Desktop/344/08
for arg in --resources --requesters --errors
do
    echo Starting: ./log_parse.sh "$arg" --day 10-20 --number 10 access_log_Jul95
    ./log_parse.sh "$arg" --day 10-20 --number 10 access_log_Jul95
done

Можливо, ви захочете зберегти копію результату в лог-файл, а також відобразити його на екрані:

cd ~/Desktop/344/08
{
    for arg in --resources --requesters --errors
    do
        echo Starting: ./log_parse.sh "$arg" --day 10-20 --number 10 access_log_Jul95
        ./log_parse.sh "$arg" --day 10-20 --number 10 access_log_Jul95
    done
} 2>&1 | tee output.log

Додайте цей код у файлі з ім'ям, скажімо, script.sh. Потім у командному рядку запустіть:

bash ./script.sh

Отже, як саме я використовую цю for-петлю? Чи потрібно спочатку створити скрипт, а потім помістити фор-цикл всередину нього? Чи справді можливо мати сценарій, який би запускав інший сценарій?
Галактика

@Galaxy Так, саме цим ви займаєтесь. І так, сценарії можуть запускати сценарії, які можуть запускати скрипти .....
John1024,

Тож вам не потрібна #!/bin/bashлінія при виклику сценарію bash script?
Xen2050

Правильно. Під час виклику bash script(де scriptє повне ім'я файлу, включаючи будь-яке розширення), #!/bin/bashрядок необов’язковий.
John1024

0

Ознайомтесь зі спікером завдань ( http://vicerveza.homeunix.net/~viric/soft/ts/ ) - є пакети для Debian.

В основному ви можете встановити його, після чого виконати купу, tsc {script} {arguments}і вона складе команду у чергу, на якій працює фолкер у фоновому режимі.

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