Якщо я запускаю команду.
sudo some-command && some-other-command
Чи виконується sudo
також друга команда з перевагою?
Якщо я запускаю команду.
sudo some-command && some-other-command
Чи виконується sudo
також друга команда з перевагою?
Відповіді:
TL; DR: НІ
Перша команда -
sudo some-command
Друга команда -
some-other-command
Команда sudo
приймає таку команду і виконує її з підвищеними привілеями. &&
, Однак, не відноситься до команди і інтерпретатора, перед виконанням першої команди. Це говорить bash, щоб спочатку виконати першу команду, а за успіхом - другу.
Тож sudo
не знаю про це && some-other command
. Коли піднесений процес закінчується, bash приймає своє повернене значення, а потім виконує іншу команду, яка знову не знає першої.
Це можна легко продемонструвати:
$ sudo whoami && whoami
root
username
Щоб досягти того, що ви хочете, ви можете запустити підвищений удар і дозволити йому виконувати обидві команди:
$ sudo bash -c 'whoami && whoami'
root
root
Отже, обидві команди виконуються як root, оскільки весь описаний вище процес виконується в підвищеному процесі, тобто сеанс bash, розпочатий з цієї команди, який негайно завершується після завершення. І все-таки обидва whoami
не знають існування один одного.
Це не відповідає жодній меті, але для цієї демонстрації простіший спосіб - це просто зробити
sudo some-command && sudo some-other-command
Ні. Деякі приклади цього:
sudo some-command && sudo some-other-command
sudo sh -c "some-command && some-other-command"
або якщо ви хочете вкладати команди, ви навіть можете:
sudo bash <<"EOF"
some-command
some-other-command
sudo bash <<"EOF2"
some-command2
some-other-command2
EOF2
EOF
$ sudo -s -- whoami && whoami
даєroot
username
sudo -s -- "whoami && whoami"
Здається, команда не знайдена, більш-менш те саме, що команда "whoami && whoami"
. Як використовувати цю конструкцію за допомогою &&? Я бачу, що sudo -s cd ..
не дає помилок на відміну від sudo cd ..
.
sudo bash <<"EOF"
! Дякую! :-)
Ні, або два рази потрібно написати судо, або зробити щось подібне
sudo bash -c 'foo && bar'
&&
означає , що команда правобічної (другий) буде працювати тільки , тільки якщо щоб стороння команда (перший) успішний тобто код виходу $?
є 0
.
Дві команди відрізняються одна від одної і виконуватимуться у власних середовищах, тому друга команда не буде працювати з sudo
привілеєм.
Це дозволить вам зрозуміти:
$ sudo whoami && whoami
root
foobar
НІ, і наступне колись було дуже часто макро'д.
sudo reboot && exit
Практично кожен повинен був зробити це хоча б раз
sudo apt-get update && sudo apt-get upgrade
Таким чином, це чудове запитання про співбесіду "міккі-миші".
Це настільки легко перевіряється, що це питання може бути запідозрене в статевих вправах.
У командному рядку, коли бачите
$ command one && command two
типовим наміром є виконання команди, яка слідує &&, тільки якщо перша команда успішна.
абсолютно ні, це так само, як написання двох послідовних команд, це && не дає додаткової пільги для команди. Це просто сепаратор .
Щоб довести це, візьмемо приклад.
touch fileA fileB
Я створив два файли fileA і fileB. Тепер я запускаю команду
sudo chown test:test fileA && chown test:test fileB
Я змінюю користувача та групи власників цих файлів на тест імені користувача та групи. Тепер перша команда повинна запускатися, а як щодо другої?
Вихід:
chown: changing ownership of `fileB': Operation not permitted
Отже команда не запускалася, оскільки вона потребує, sudo
і хоча ми можемо зробити висновок, що && не є заміною другогоsudo
whoami
прикладу.