Запуск .sh для выполнения нескольких команд

Мне было любопытно, как я буду выполнять несколько команд с помощью сценария оболочки.

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

В любом случае?

11
задан 20 July 2014 в 03:50

2 ответа

На самом деле все просто - вам нужно разделить команды. Например, это:

#!/bin/bash
sudo apt-get update
sudo apt-get upgrade

обновит списки пакетов, а затем пакеты . Другая возможность - это (возможно, лучше, поскольку && разрешит выполнение команды upgrade только в случае успешного завершения update ) :

#!/bin/bash
sudo apt-get update && sudo apt-get upgrade

Это должно запустите команды для обновления списка пакетов, а затем самих пакетов. Его необходимо сохранить в текстовый файл (например, updatescript в домашнем каталоге). Затем вы можете сделать его исполняемым, запустив:

 chmod +x ./updatescript

или щелкнув правой кнопкой мыши файл и сделав его исполняемым в его свойствах:

и запустите его с этим в терминале:

 ./updatescript

Примечание (я): [1225 3] Доступна опция ( -y ), которую можно использовать с командой upgrade , поэтому она не выводит запрос перед обновлением пакетов. Перед обновлением пакетов рекомендуется проверить, что делает apt-get , поскольку он может / сделает что-то глупое или что-то, чего вы не хотите. Дополнительную информацию о подобных параметрах можно найти, запустив man apt-get .

Это также означает, что для запуска сценария более идеальным вариантом будет использование терминала, поскольку вы можете проверить, что он обновляет, а затем запустите его. Если вам нужен графический интерфейс для запуска обновлений, используйте программный центр, поскольку он для этого предназначен.

10
ответ дан 20 July 2014 в 03:50

Чтобы добавить несколько пунктов к отличному ответу @Wilf,

вы можете запускать команды в параллельном режиме, если хотите по какой-либо причине, например, автозапуск ] для OpenBox может выглядеть так:

#!/bin/bash

nitrogen --restore &
tint2 &
tilda

Это установит фоновое изображение с использованием азота , запустит панель tint2 и запустит раскрывающуюся консоль в стиле Quake3 tilda , и все одновременно. Это полезно, если вам не нужно завершать программу перед запуском следующей. Но не apt-get update и apt-get upgrade !

Обратите внимание на знак & в конце каждой строки. Это заставит оболочку выполнить ответвление этого процесса в фоновом режиме и продолжить выполнение.Обратите внимание, чем он отличается от && , который по сути является знаком и , command_1 && command_2 выполнит command_1 и, если он завершится успешно , только затем запустите command_2 , а command_1 & command_2 запустит второе сразу после первого.


Кроме того, вы можете просто складывать команды, чтобы они выполнялись последовательно, например:

#!/bin/bash

apt-get update
apt-get upgrade

Это запустит apt-get upgrade после того, как apt-get update будет завершено , но независимо от результата. Таким образом, даже если, например, обновление завершается с сетевой ошибкой, обновление все равно будет выполнено.

Вы также можете сделать это в одной строке, используя знак ; : apt- получить обновление ; apt-get upgrade . Опять же, это решение не оптимальное для этих конкретных команд, но оно может пригодиться в других ситуациях.


Одно быстрое заключительное замечание, вы также можете разбить строки, содержащие && как например:

command_1 &&
command_2

Это будет то же самое, что и command_1 && command_2 .

5
ответ дан 20 July 2014 в 03:50

Другие вопросы по тегам:

Похожие вопросы: