Как запустить несколько скриптов один за другим, но только после завершения предыдущего?

Да:

$ env UID=0 EUID=90 bash -c 'echo $UID $EUID'
0 90

Обратите внимание, что приведенное выше просто изменяет значения переменных. Фактический UID и EUID не затрагиваются.

Вместо этого следует использовать id. См., например. вопрос Как остановить запуск скрипта, если он не root (и эхо "Не работает как root! Выход...")

Эффективный идентификатор пользователя также будет отличаться от реального идентификатора, если скрипт имеет установленный -бит uid (и запуск таких сценариев с установленным -uid является вещью на вашем Unix ). В этом случае UID будет идентификатором пользователя, вызывающего скрипт, а EUID — владельцем скрипта.

Связанные:Разрешить setuid для сценариев оболочки

1
18.11.2019, 01:34
1 ответ
  • С ;между командами они будут работать так, как если бы вы дали команды одну за другой в командной строке. Сценарий не запустится, пока предыдущий не завершится. Это было бы то же самое, что использовать символ новой строки между каждой командой, указав их в отдельных строках.

  • С &&вы получите тот же эффект, но сценарий не будет запущен, если любой предыдущий сценарий завершился с не -нулевым статусом выхода (, указывающим провал ).

  • С ||вы получите тот же эффект, но сценарий будет запускаться только , если все предыдущий предыдущий сценарий завершился с не -нулевым статусом выхода (] указывает на сбой ).

  • С помощью &все сценарии будут выполняться почти одновременно, параллельно, как асинхронные задания (фоновые задания ). Это вряд ли то, что вы хотите.

  • С помощью |все скрипты будут выполняться почти одновременно, параллельно. Стандартный поток вывода одного сценария будет подключен к стандартному потоку ввода следующего сценария в конвейере. Это вряд ли то, что вы хотите.

В зависимости от того, что вы подразумеваете под «завершено», вы, вероятно, захотите использовать либо;(не заботиться о статусе выхода предыдущего скрипта ), либо&&(заботиться о статусе выхода; запускайте сценарий только в том случае, если предыдущий не сигнализировал об ошибке )между командами.

7
27.01.2020, 23:29

Теги

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