2012-08-09 30 views
8

Başka bir kullanıcı olarak komutları çalıştırmaya çalışıyorum ve bu kullanıcı olarak girdi okuyorum. Bazı nedenlerle betik read komutunda durmuyor, neden olduğuna emin değilim.Bash komut dosyası okunmadı

#!/bin/bash 
username='anthony' 
sudo -H -u "$username" bash << 'END_COMMAND' 

# Commands to be run as new user 
# ------------------------------- 

echo "#! Running as new user $USER..." 


echo "#! Gathering setup information for $USER..." 
echo -n "Enter your name and press [ENTER]: " 
read name 
echo -n "Enter your email and press [ENTER]: " 
read email 
END_COMMAND 

echo "Done" 

herhangi bir fikir bu read name veya read email üzerinde durmuyor neden olarak: Burada senaryonun bir örnek?

cevap

20

read stdin'den okuyor ve bash, stdin'i heredoctan gelen sudo'dan devralıyor. Başka bir yerden gelmesini istiyorsan, açık olmalısın. Örneğin: sudo standart dışı dosya tanımlayıcıları kapatır beri

bash 3<&0 << 'END_COMMAND' 
... 
read <&3 
... 

Ancak bu, sudo ile çalışmaz. Ama bu dosya tanıtıcı yeniden paçayı eğer, yapmanız mümkün olabilir bu yüzden Sudo, değil yakın stderr'yi yapar:

sudo -H -u "$username" bash 2<&0 << 'END_COMMAND' 
... 
read -u 2 email 
... 

Ama yapmak muhtemelen çok daha güvenli:

sudo -H -u "$username" bash << 'END_COMMAND' 
... 
read email < /dev/tty 
... 
+0

Harika yanıt, teşekkürler. – alukach

0

Can seni bu komut dosyasını sudo olarak çalıştırıp çalıştırmadığını kontrol edin ve eğer değilse, sudo ile birlikte çalıştırın?

#!/bin/bash 
username='anthony' 

if [[ -z "${SUDO_USER}" ]]; then 
    exec sudo -H -u "${username}" -- $0 
fi 

echo " 
# Commands to be run as new user 
# ------------------------------- 
" 
echo "#! Running as new user $USER..." 

echo "#! Gathering setup information for $USER..." 
echo -n "Enter your name and press [ENTER]: " 
read name 
echo -n "Enter your email and press [ENTER]: " 
read email 
İlgili konular