Как передать переменную в sftp?

Я пытаюсь сопоставить имя файла с строкой, которая является в основном временной меткой, во время SFTP-соединения.

Как мне соответствовать части имени файла? Я не могу объявить переменную в SFTP-соединении. И я также не могу вызвать переменную, созданную в Bash заранее.

Изменить: все, что я пробовал

yr=$(date + "%Y") sftp -i key.pem un@server sftp> echo $yr Invalid command. sftp> $yr Invalid command. 

новая оболочка

 sftp -i key.pem un@server sftp> test=$(date +"%Y") Invalid command. 

Пробовал эти 2

2 Solutions collect form web for “Как передать переменную в sftp?”

Программа sftp – это свое дело; он полностью независим от и не связан с bash , который знает значение своих переменных и будет расширять $yr . В общем, вы не можете передавать переменные bash во внешние программы, подобные этим, не используя методы связи, специфичные для приложения.

Если вы просто хотите загрузить или загрузить файл с $yr в имени файла, вы можете использовать scp вместо этого, например:

 yr=$(date +%Y) scp -i key.pem un@server:/some/long/path/that/includes/$yr . 

для загрузки или

 scp -i key.pem some_local_file un@server:/some/long/$yr/path 

для загрузки.

Если по какой-то причине вам действительно нужно использовать sftp , вы можете создать пакетный файл динамически, например

 sftp -i key.pem -b - un@server <<< "get /some/path/with/$yr" 

sftp является автономной программой, а не частью оболочки. Он не понимает синтаксис оболочки. Он не имеет таких функций, как расширение переменных и условные операторы.

Самый простой способ сделать сложные вещи по SFTP – использовать SSHFS . SSHFS – это файловая система, использующая SFTP, чтобы сделать удаленную файловую систему отображаемой в качестве локального filessytem. На клиенте SSHFS требует FUSE , который доступен для большинства современных устройств. На сервере SSHFS требует SFTP; если сервер разрешает SFTP, то с ним можно использовать SSHFS.

 mkdir server sshfs -o IdentityFile=key.pem un@server: server cp "server/dir/myfile-$(date +%Y).txt" /local/path fusermount -u server 
  • Передача переменной из одного сценария в другой
  • Установка переменной, значение которой зависит от другой переменной
  • В сценарии bash, что отличается между объявлением и нормальной переменной?
  • Каков наиболее эффективный способ grep для двух совершенно разных вещей и присвоения значений отдельным переменным?
  • Использование eval в файле make
  • grep переменная в выражении if
  • Как добавить текст в переменную в make-файле?
  • Поведение задания массива
  • Удалить определенное слово в переменной
  • Переменная в команде find задана новой переменной в bash
  • bash - добавить пустую строку в heredoc через переменную
  • Linux и Unix - лучшая ОС в мире.