Если я выполню команду.
sudo some-command && some-other-command
Вторая команда, выполняемая с sudo
, также превалирует?
TL; DR: НИКАКОЙ
<час>первая команда
sudo some-command
, вторая команда
some-other-command
, команда sudo
принимает следующее управление и выполняет его с поднятыми полномочиями. Эти &&
, однако, не принадлежит команде и интерпретируется оболочкой, прежде, чем выполнить первую команду. Это говорит удару сначала выполнять первую команду, и на успехе второй.
Так эти sudo
не знает о && some-other command
. Когда поднятый процесс завершается, удар берет свое возвращаемое значение, и затем выполняет другую команду, которая снова не знает о первом.
Это может быть продемонстрировано легко:
$ sudo whoami && whoami
root
username
Для достижения, что Вы хотите можно запустить поднятый удар и позволить ему выполнить обе команды:
$ sudo bash -c 'whoami && whoami'
root
root
Так же теперь, обе команды выполняются как корень, как целый процесс, описанный выше, выполняется в поднятом процессе, т.е. сессии удара, запущенной с этой команды, которая сразу выходит после окончания. Однако, оба 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 дважды или сделать что-то как
sudo bash -c 'foo && bar'
&&
средства, которые только выполнит право примкнувшая (вторая) команда, только если, чтобы примкнутая (первая) команда не успешна т.е. код выхода $?
0
.
две команды отличаются друг от друга и будут работать в их собственных средах, таким образом, вторая команда не выполнит наличие sudo
полномочие.
Это ясно даст понять Вас:
$ sudo whoami && whoami
root
foobar
Нет, и следующее было однажды очень обычно macro'd.
sudo reboot && exit
Примерно все должны были сделать это [по крайней мере 112] однажды
sudo apt-get update && sudo apt-get upgrade
Таким образом, это - великое "mickey мышь" вопрос об интервью.
Это так легко тестируется, что вопрос может подозреваться к дополнительному осуществлению статистики.
На командной строке, когда Вы видите
$ 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