Ожидаемо добавляет данные в файл

Я сделал скрипт:

for server in ${servTab[*]}; do
echo $server >> /var/www/html/df.txt
/usr/bin/expect <<EOF
spawn ssh $server df | grep /appl/ | awk '{print \\\$4}' | sed s/%// >> /var/www/html/df.txt
expect "password"
send "$pass\r"
expect "$ "
EOF

но после запуска у меня ошибка:

spawn ssh server-1-lin df | grep /appl/ | awk '{print $4}' | sed s/%// >> /var/www/html/df.txt
ksh: /var/www/html/df.txt: cannot create [No such file or directory]

Это работает, только если это выглядит ниже:

for server in ${servTab[*]}; do
echo $server >> df.txt
/usr/bin/expect <<EOF
spawn ssh $server df | grep /appl/ | awk '{print \\\$4}' | sed s/%// >> df.txt
expect "password"
send "$pass\r"
expect "$ "
EOF

но всегда файл "df.txt" создается в домашнем каталоге пользователя, независимо от того, какой скрипт каталога. Спасибо за помощь.

1 ответ

Решение

Простой ответ здесь - перестать использовать expect; это усложняет вашу жизнь, и в данном сценарии нет убедительных преимуществ.

#!/usr/bin/env bash

# make sure this is an array
servTab=( serverOne serverTwo serverThree )

# Advice: Stop passing passwords around and use SSH agent authentication.
[[ $pass ]] || read -s -r -p "Password: " pass

# open your output file *once*; truncate it when that happens.
exec 3>/var/www/html/df.txt

for server in "${servTab[@]}"; do
  echo "$server" >&3
  SSHPASS="$pass" sshpass -e "$server" df      \
    | awk '/appl/ { gsub(/%/, ""); print $4 }' \
    >&3
done
Другие вопросы по тегам