O shell em execução no terminal recebe o script que você está colando na entrada padrão e o próprio script lê a partir da entrada padrão. Há um conflito aqui: seu script acabará lendo um pouco de si mesmo.
Se você não receber um prompt do sudo, o que acontece é:
- O shell lê linhas inteiras até que tenha um comando completo. A primeira linha inicia um documento aqui, então o shell continua lendo o documento aqui.
- Quando o shell atinge a primeira linha
EOF
, ele tem um comando completo, portanto, ele é executado. -
sudo sync
e 'echo'… 'executado. -
read pass
é executado. Ele lê uma linha de entrada, que ésudo bash -c …
. Isso definepass
. -
sudo sync
é executado. - O shell concluiu a execução dos comandos que leu, por isso lê a próxima linha de entrada que é
[Unit]
.
Não cole o código shell multilinha complexo em um terminal. Em vez disso, se você realmente precisar executar o conteúdo da área de transferência como um script de shell, use xsel ou xclip em X11 ou pbpaste
no OSX.
eval "'xsel'"
eval "'xclip'"
eval "'pbpaste'"
Mas, na verdade, o que você deve fazer é colocar isso em um script, com #!/bin/sh
no topo.