Se eu executar um comando.
sudo some-command && some-other-command
O segundo comando também está sendo executado com o sudo
previlege?
TL; DR: NÃO
O primeiro comando é
sudo some-command
O segundo comando é
some-other-command
O comando sudo
pega o seguinte comando e o executa com privilégios elevados. O &&
, no entanto, não pertence a um comando e é interpretado pelo shell antes de executar o primeiro comando. Ele diz ao bash para executar primeiro o primeiro comando e, com sucesso, o segundo.
Então o sudo
não sabe sobre o && some-other command
. Quando o processo elevado termina, o bash recebe seu valor de retorno e depois executa o outro comando, que novamente não conhece o primeiro.
Isso pode ser demonstrado facilmente:
$ sudo whoami && whoami
root
username
Para alcançar o que deseja, você pode iniciar um bash elevado e executar os dois comandos:
$ sudo bash -c 'whoami && whoami'
root
root
Portanto, agora, ambos os comandos são executados como raiz, pois todo o processo descrito acima é executado em um processo elevado, ou seja, a sessão bash iniciada com este comando, que sai imediatamente após o término. Ainda assim, os dois whoami
não sabem da existência um do outro.
Isso não serve para nenhum propósito, mas para esta demonstração, a maneira mais fácil é simplesmente fazer
sudo some-command && sudo some-other-command
whoami
exemplo.Não. Alguns exemplos que fazem isso são:
ou se você deseja aninhar comandos, pode até fazer:
fonte
$ sudo -s -- whoami && whoami
dároot
username
sudo -s -- "whoami && whoami"
parece dar comando não encontrado, mais ou menos o mesmo que comando"whoami && whoami"
. Como usar esta construção com &&? Vejo quesudo -s cd ..
não dá erro ao contráriosudo cd ..
.sudo bash <<"EOF"
:! Obrigado! :-)Não, você deve escrever sudo duas vezes ou fazer algo como
fonte
&&
significa que o comando do lado direito (segundo) só será executado se o comando do lado contrário (primeiro) for bem-sucedido, ou seja, o código de saída$?
é0
.Os dois comandos são diferentes um do outro e serão executados em seus próprios ambientes, portanto o segundo comando não será executado com
sudo
privilégios.Isso vai deixar você claro:
fonte
NÃO, e o seguinte já foi muito comumente macro.
Quase todo mundo deveria ter feito isso pelo menos uma vez
Portanto, é uma ótima pergunta para a entrevista "mickey mouse".
Isso é tão facilmente testado que a pergunta pode ser suspeita de um exercício de preenchimento estatístico.
fonte
Na linha de comando, quando você vê
a intenção típica é executar o comando que segue o && somente se o primeiro comando for bem-sucedido.
O outro comando também é executado como sudo?
absolutamente não, isso é como escrever dois comandos consecutivos; este && não oferece privilégios adicionais a um comando. É apenas um separador .
Para provar isso, vamos dar um exemplo.
Criei dois arquivos fileA e fileB. Agora eu vou executar o comando
Estou alterando o usuário e o proprietário do grupo desses arquivos para teste de nome de usuário e grupo. Agora, o primeiro comando deve ser executado, e o outro?
A saída é:
Portanto, o comando não foi executado, pois é necessário
sudo
e, embora possamos concluir que o&& não substitui o segundosudo
fonte