Есть и другие темы с такой же темой, но моя проблема уникальна. Я запускаю сценарий bash, в котором есть функция, которая подключается к удаленному серверу по sshes и запускает команду sudo на удаленном сервере. Я использую опцию ssh -t, чтобы избежать проблемы с требованием. Ошибочная строка кода работает нормально, пока она НЕ вызывается из цикла while. Цикл while в основном читает из CSV-файла на локальном сервере и вызывает функцию checkAuthType:
while read inputline
do
ARRAY=(`echo $inputline | tr ',' ' '`)
HOSTNAME=${ARRAY[0]}
OS_TYPE=${ARRAY[1]}
checkAuthType $HOSTNAME $OS_TYPE
<more irrelevant code>
done < configfile.csv
Это функция, которая находится в верхней части скрипта (вне любых циклов while):
function checkAuthType()
{
if [ $2 == linux ]; then
LINE=`ssh -t $1 'sudo grep "PasswordAuthentication" /etc/ssh/sshd_config | grep -v "yes\|Yes\|#"'`
fi
if [ $2 == unix ]; then
LINE=`ssh -n $1 'grep "PasswordAuthentication" /usr/local/etc/sshd_config | grep -v "yes\|Yes\|#"'`
fi
<more irrelevant code>
}
Таким образом, оскорбительная строка — это строка, в которой есть команда sudo внутри функции. Я могу изменить команду на что-то простое, например «sudo ls -l», и я все равно буду получать ошибку «stdin is not a terminal». Я также пробовал "ssh -t -t", но безрезультатно. Но если я вызываю функцию checkAuthType вне цикла while, она работает нормально. Что такого в цикле while, который изменяет терминал и как его исправить? Заранее спасибо тысячу раз.