Оболочка сообщает об ошибке "команда не найдена" для данных, отображаемых в команде telnet

find /data/backup/ -name 20140202* -exec awk -F"|" '$23!=0 {print"|"$14"|"$23}' {}       
\; > Day1.txt

host='XX.XX.XX.XX'
user='root'
passwd='root'
(
echo "$user"
echo "$passwd"
echo "cd /data/"
echo "find /data/backup/ -name rec20140202* -exec awk -F"|" '$23!=0 {print"|"$14"|"$23}'  
{} \; > remoteDay1.txt"
echo "exit" )| telnet "$host"

В приведенном выше фрагменте кода первая команда поиска работает нормально, но вторая команда поиска (внутри части telnet) приводит к следующей ошибке:


testnew.sh: line 27: '3!=0 {print: command not found
testnew.sh: line 27: 4: command not found
testnew.sh: line 27: 3: command not found
testnew.sh: line 27: }' {} \; > remoteDay1.txt: command not found
Connection closed by foreign host.

Пожалуйста, помогите

1 ответ

Это ваша проблема:

echo "find /data/backup/ -name rec20140202* -exec awk -F"|" '$23!=0 {print"|"$14"|"$23}' 

Вы дважды заключаете в кавычки аргумент echo, а также используете двойные кавычки в -F"|" и даже в сценарии awk. Затем оболочка пытается построить 4-программный канал, эквивалентный

 echo "find /data/backup/ -name rec20140202* -exec awk -F" |
 " '$23!=0 {print"                                         |
 "$14"                                                     |
 "$23}' {} \; > remoteDay1.txt"

Поскольку позиционные параметры оболочки$1 а также $2 пусты, вы получите именно те ошибки, которые вы описали. Если вы хотите двойные кавычки в двойных кавычках, вам нужно их избежать:

echo \"foo\"

вторит "foo" в том числе цитаты. Обратите внимание, что невозможно заключить в одинарные кавычки одну строку в кавычках. Вы также хотите скрыть $23 и т. д. из расширения оболочки. Побег их как \$, Я предлагаю использовать

echo "find ... -F\"|\" '\$23!=0 {print \"|\"\$14\"|\"\$23}' {} \;>remoteDay1.txt"
Другие вопросы по тегам