Если я запускаю команду.
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
whoami
пример.Нет. Некоторые примеры, которые делают это:
или если вы хотите использовать команды nest, вы можете даже выполнить:
источник
$ sudo -s -- whoami && whoami
даетroot
username
sudo -s -- "whoami && whoami"
кажется, что команда не найдена, более или менее такая же, как команда"whoami && whoami"
. Как использовать эту конструкцию с &&? Я вижу, что это неsudo -s cd ..
дает ошибки в отличие отsudo cd ..
.sudo bash <<"EOF"
! Спасибо! :-)Нет, либо вы должны написать sudo дважды, либо сделать что-то вроде
источник
&&
означает , что команда правосторонней (второй) будет работать только , только если чтобы сторонняя команда (первый) успешен т.е. код выхода$?
является0
.Эти две команды отличаются друг от друга и будут выполняться в их собственных средах, поэтому вторая команда не будет выполняться с
sudo
привилегиями.Это прояснит вам:
источник
НЕТ, и следующее было когда-то очень часто макросов.
Почти каждый должен был сделать это хотя бы один раз
Таким образом, это отличный вопрос для интервью "Микки Маус".
Это так легко проверить, что вопрос может быть заподозрен в упражнении по заполнению статистики.
источник
В командной строке, когда вы видите
типичное намерение состоит в том, чтобы выполнить команду, которая следует за &&, только если первая команда успешна.
Другая команда работает также как sudo?
абсолютно нет, это так же, как написание двух последовательных команд, это && не дает никаких дополнительных привилегий команде. Это просто разделитель .
Чтобы доказать это, давайте возьмем пример.
Я создал два файла fileA и fileB. Теперь я буду управлять командой
Я меняю пользователя и владельца группы этих файлов на проверку имени пользователя и группы. Теперь первая команда должна быть запущена, а другая?
Выход:
Таким образом, команда не была запущена, так как она нужна,
sudo
и хотя мы можем сделать вывод, что && не является заменой второгоsudo
источник