Dependendo do shell, o comando echo
pode ou não executar a expansão de barra invertida para transformar \n
em uma nova linha. Por exemplo, o bash não é por padrão, mas sim após shopt -s xpg_echo
.
Mas mesmo que o echo
incorporado em sh
realize uma expansão de barra invertida na sua máquina, seu código não será acionado devido a como você escreveu o comando. Você está passando a string echo passw0rdnpassw0rdnn | vncpasswd
para o comando su
: a segunda aspas duplas terminam o literal de cadeia com aspas duplas e a terceira aspas duplas inicia um novo literal de cadeia com aspas duplas, portanto as sequências \n
não estão aspas duplas no shell externo e, portanto, \n
expande para n
. Você quis escrever algo como
su nonrootuser -c "echo -e 'passw0rd\npassw0rd\nn' | vncpasswd"
para que as barras invertidas sejam passadas literalmente pelos dois shells e com a opção -e
passada para echo
para que ele execute a expansão da barra invertida.
Mas, em vez de mexer com echo
de uma maneira não totalmente portátil, basta chamar printf
(que é totalmente confiável) ou executar echo
uma vez para cada linha:
su nonrootuser -c "{ echo 'passw0rd'; echo 'passw0rd'; echo n; } | vncpasswd"
su nonrootuser -c "printf '%s\n' 'passw0rd' 'passw0rd' n | vncpasswd"
su nonrootuser -c "
vncpasswd <<EOF
passw0rd
passw0rd
n
EOF"