Я считаю, что проблема заключается в цитировании; это будет понятнее, если я поставлю разрывы строк там, где оболочка видит закрывающие кавычки:
typeset -f mdate | ssh 10.225.28.45 "cd "\
$tar_dir"; $(cat); for xml_file in *.xml; do mdate_xml=$(mdate $xml_file) if [[ "\
$f1_mdate" == "\
$mdate_xml" ]]; then echo 1; fi; done"
С точки зрения того, как написать это правильно ... это очень сложно, потому что у вас есть два слоя оболочки, которые интерпретируют команды, разбирают кавычки и интерполируют переменные. Я обычно пишу небольшой сценарий оболочки, копирую его на удаленный компьютер и запускаю его удаленно, просто чтобы обойти это ... или использую инструмент, подобный ansible.
В качестве примера того, как получить данные на удаленный компьютер и с него: я создал /tmp/a.sh
на удаленном компьютере foo
. Вот содержание /tmp/a.sh
:
while read line
do
echo "xyzzy> $line"
done
На моем локальном компьютере /tmp/xyz
содержит
foo
bar
baz
Запуск
cat /tmp/xyz | ssh foo bash /tmp/a.sh
даст
xyzzy> foo
xyzzy> bar
xyzzy> baz
xyzzy>
Вы можете перенаправить вывод в файл:
cat /tmp/xyz | ssh foo bash /tmp/a.sh > a.txt
Файл a.txt
будет на вашем локальном компьютере.