1

我正在使用以下脚本循环浏览本地文件夹中的所有文件,并将它们上传到sftp使用sshpass. 我已经尝试过put上传单个文件的语句。但我不知何故有问题把我的<<EOFEOF正确的放在哪里?还是缺少其他东西?

#!/bin/bash

FILES= /MY_LOCAL_FOLDER_PATH/*
sshpass -p 'MY_PASSWORD' sftp -o StrictHostKeyChecking=no -o HostKeyAlgorithms=+ssh-dss MY_USERNAME@FTP_URL:/Import 
<<EOF
for f in $FILES   
do
chmod +X $f
put $f
done
EOF

我把它放在chmod那里是因为我的文件“权限被拒绝”。


Ionic 2 导入模块错误

我正在尝试导入下面列出的模块,但是对于没有导出成员的每个模块,我都收到错误消息。我手动检查了@angular/common 文件夹,但找不到列出的这些模块。我在哪里可以得到那些?

 import {FORM_DIRECTIVES, FormBuilder,  ControlGroup, Validators, AbstractControl} from '@angular/common';
4

2 回答 2

2

如果要生成put命令sftp作为输入,则必须通过管道传输它们。您不能在 here-document 中处理循环。此外,您不应该使用,因为系统上的所有进程都可以通过和sshpass -p看到程序的命令行,甚至可以看到其他用户的命令行。(非常简短,但无论如何都是可见的。)环境变量只对同一个用户可见,但一般来说,ssh 键可能仍然更可取。procps

像这样的东西可能会起作用:

#!/bin/bash
export SSHPASS=MY_PASSWORD
for f in /path/* ; do 
    echo put "$f"
done | sshpass -e sftp user@whereever:/path
unset SSHPASS

循环内的任何命令都在本地执行,任何你想作为命令传递给sftp的命令都应该通过echo或类似的方式打印出来。(当然,命令不应该打印任何不应该去的东西sftp。)

于 2017-06-14T08:37:21.140 回答
-1

尝试<<EOF在行尾使用аsshpass

#!/bin/bash

FILES= /MY_LOCAL_FOLDER_PATH/*
sshpass -p 'MY_PASSWORD' sftp -o StrictHostKeyChecking=no \
    -o HostKeyAlgorithms=+ssh-dss MY_USERNAME@FTP_URL:/Import <<EOF
for f in $FILES   
do
chmod +X $f
put $f
done
EOF
于 2017-06-14T08:14:58.160 回答