Porque os comandos que estão contidos no command.txt
são executados por um shell mestre um a um.
Assim, o shell mestre executa o sudo
, espera que ele saia, antes de continuar com os outros comandos ( ls
e cd
). E o sudo
não sai (pelo menos não por conta própria).
Enquanto você deseja que ls
e cd
sejam executados dentro de um shell filho executado pelo su
.
Você precisa dizer ao su
para executar os comandos.
Isso deve funcionar:
sudo su - -c "ls ; cd directory" user1
ou isto
echo "ls; cd directory" | sudo su - user1
Embora eu espere que você realmente queira continuar trabalhando no shell. Enquanto o acima sairá assim que os comandos forem executados.
Então você quer adicionar um shell à lista de comandos:
sudo su - -c "ls ; cd directory ; /bin/bash" user1
ou
echo "ls ; cd directory ; /bin/bash" | sudo su - user1