Оболочка сообщает об ошибке "команда не найдена" для данных, отображаемых в команде 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"