Да:
$ env UID=0 EUID=90 bash -c 'echo $UID $EUID'
0 90
Обратите внимание, что приведенное выше просто изменяет значения переменных. Фактический UID и EUID не затрагиваются.
Вместо этого следует использовать id
. См., например. вопрос Как остановить запуск скрипта, если он не root (и эхо "Не работает как root! Выход...")
Эффективный идентификатор пользователя также будет отличаться от реального идентификатора, если скрипт имеет установленный -бит uid (и запуск таких сценариев с установленным -uid является вещью на вашем Unix ). В этом случае UID будет идентификатором пользователя, вызывающего скрипт, а EUID — владельцем скрипта.
Связанные:Разрешить setuid для сценариев оболочки
С ;
между командами они будут работать так, как если бы вы дали команды одну за другой в командной строке. Сценарий не запустится, пока предыдущий не завершится. Это было бы то же самое, что использовать символ новой строки между каждой командой, указав их в отдельных строках.
С &&
вы получите тот же эффект, но сценарий не будет запущен, если любой предыдущий сценарий завершился с не -нулевым статусом выхода (, указывающим провал ).
С ||
вы получите тот же эффект, но сценарий будет запускаться только , если все предыдущий предыдущий сценарий завершился с не -нулевым статусом выхода (] указывает на сбой ).
С помощью &
все сценарии будут выполняться почти одновременно, параллельно, как асинхронные задания (фоновые задания ). Это вряд ли то, что вы хотите.
С помощью |
все скрипты будут выполняться почти одновременно, параллельно. Стандартный поток вывода одного сценария будет подключен к стандартному потоку ввода следующего сценария в конвейере. Это вряд ли то, что вы хотите.
В зависимости от того, что вы подразумеваете под «завершено», вы, вероятно, захотите использовать либо;
(не заботиться о статусе выхода предыдущего скрипта ), либо&&
(заботиться о статусе выхода; запускайте сценарий только в том случае, если предыдущий не сигнализировал об ошибке )между командами.