Как передать переменную в 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 
  • Присвоение нового значения непосредственно в индекс символа значения в массиве с zsh
  • Используйте sed для извлечения переменной из 1 файла и поместите ее в другую
  • Несколько входов в одной команде
  • Объем переменных при вызове функции из find
  • Установка переменной со значением по умолчанию ведет себя по-другому, если перед командой?
  • Bash: Назначение переменной не похоже на «stick»
  • Как выбрать количество цифр в переменной в моих сценариях?
  • Как вы обрабатываете несколько правил валидации при различных пользовательских вводах?
  • Объявление переменной параллельным sh -c ...
  • Использование «$ {a: -b}» для назначения переменных в скриптах
  • команда find не дает никакого вывода
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.