Если я запускаю команду.
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
Чтобы достичь того, что вы хотите, вы можете запустить повышенный bash и позволить ему выполнить обе команды:
$ 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"
или если вы хотите использовать команды nest, вы можете даже выполнить:
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 дважды, либо сделать что-то вроде
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
пример.