expect 将数据附加到文件
expect appends data to a file
我制作了脚本:
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 }' | 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" 总是在用户的主目录中创建,无论脚本在哪个目录中。感谢您的帮助。
这里的简单答案是停止使用 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 }' \
>&3
done
我制作了脚本:
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 }' | 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" 总是在用户的主目录中创建,无论脚本在哪个目录中。感谢您的帮助。
这里的简单答案是停止使用 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 }' \
>&3
done