В оригинальном предоставленном коде:
ssh remoteid@remoteserver 'cd /upload/hotfolders/; mv "$FileName"
/upload/hotfolders/Archive/"${FileName}_${ts}"'
самые внешние '
используются в локальной файловой системе для хранения всех команд в качестве одного аргумента для ssh.Однако это означает, что $FileName
и т. Д. Не расширяются локально!Вместо этого нерасширенные строки дословно передаются на удаленный сервер, где запускается оболочка для запуска команды.$FileName
и т. Д., Затем расширяются там.Поскольку они там не определены (возможно), расширение не может дать ничего полезного.
В исправленной версии:
ssh remoteid@remoteserver "'mv /upload/hotfolders/in/"$FileName"
/upload/hotfolders/Archive/${FileName}_${ts}'"
существует другая проблема.Здесь два набора самых внешних "
позволяют локальной системе расширять переменные (хотя может быть не очевидно, что первый $FileName
на самом деле не находится внутри "
).Однако, поскольку переданная команда теперь заключена в '
, удаленный сервер будет обрабатывать всю строку как одно слово.
Если предположить, что FileName
и ts
не будут содержать оболочку-специальные символы (такие как '
), тогда исправление заключается в том, чтобы обернуть последовательность команд в "
(чтобы она расширялась локально), и только обернуть переменные в '
(так, чтобы удаленный сервер обрабатывал теперь-расширенные строки как отдельные слова):
ssh remoteid@remoteserver "cd /upload/hotfolders/; mv '$FileName'
/upload/hotfolders/Archive/'${Filename}_${ts}'"