При использовании && и sudo в первой команде, вторая команда запускается также как sudo?

Если я выполню команду.

sudo some-command && some-other-command

Вторая команда, выполняемая с sudo, также превалирует?

64
задан 10 June 2015 в 14:44

6 ответов

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
0
ответ дан 10 June 2015 в 14:44

Нет. Некоторые примеры, которые делают это:

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
  • 2-е использование другая оболочка.
  • Мышление, что, когда Вы используете 'или "в 2-й версии, необходимо выйти из тех в командах или параметрах той команды (т.е. \' или \") так, чтобы мог стать сложным очень быстро.
0
ответ дан 10 June 2015 в 14:44

Нет, или необходимо записать sudo дважды или сделать что-то как

sudo bash -c 'foo && bar'
0
ответ дан 10 June 2015 в 14:44

&& средства, которые только выполнит право примкнувшая (вторая) команда, только если, чтобы примкнутая (первая) команда не успешна т.е. код выхода $? 0.

две команды отличаются друг от друга и будут работать в их собственных средах, таким образом, вторая команда не выполнит наличие sudo полномочие.

Это ясно даст понять Вас:

$ sudo whoami && whoami 
root
foobar
0
ответ дан 10 June 2015 в 14:44

Нет, и следующее было однажды очень обычно macro'd.

sudo reboot && exit

Примерно все должны были сделать это [по крайней мере 112] однажды

sudo apt-get update && sudo apt-get upgrade

Таким образом, это - великое "mickey мышь" вопрос об интервью.

Это так легко тестируется, что вопрос может подозреваться к дополнительному осуществлению статистики.

0
ответ дан 10 June 2015 в 14:44

На командной строке, когда Вы видите

$ command one && command two

, типичное намерение состоит в том, чтобы выполнить команду, которая следует за & & только если первая команда успешна.

другие выполнения команды как sudo также?

абсолютно никакой, это так же, как пишет две последовательных команды, этот & & не дает добавленного полномочия команде. Это - просто разделитель .

, Чтобы доказать, что позволяют нам взять пример.

touch fileA fileB 

я создал два файла fileA и fileB. Теперь я выполню команду

sudo chown test:test fileA && chown test:test fileB

, я изменяю пользователя и владельца группы этих файлов к тесту названия группы и пользователю. Теперь первая команда должна работать в то время как что относительно другого?

вывод:

chown: changing ownership of `fileB': Operation not permitted

, Таким образом, команда не работала, так как ей нужно sudo и хотя мы можем завершить это & & не замена второго sudo

0
ответ дан 10 June 2015 в 14:44

Другие вопросы по тегам:

Похожие вопросы: