[ncftp]如何将值传递给bash脚本的命令
问题描述:
我有一个bash脚本,我想用ncftp来做一些事情。如果我有这样的:[ncftp]如何将值传递给bash脚本的命令
#!/bin/sh
HOST='my_IP_FTP_HOST'
USER='username'
PASSWD='password'
ncftp -u $USER -p $PASSWD $HOST <<END_SCRIPT
pwd
quit
END_SCRIPT
我得到这个错误:
Syntax error in parameters or arguments
我不明白为什么。 如果我给它只有值,而不是它的工作变量...
如果我启动
$ sh -x script.sh
我得到:
+ HOST=$'xxx.x.xx.xx\r'
+ USER=$'username\r'
+ PASSWD=$'password\r'
+ ncftp -u $'username\r' -p $'password\r' $'xxx.x.xx.xx\r'
NcFTP 3.2.1 (Jul 29, 2007) by Mike Gleason (http://www.NcFTP.com/contact/).
Welcome to FTP server
Syntax error in parameters or arguments
嗯.... \ r产生问题当然。
答
您是否在Microsoft Windows上编辑此文件?它不起作用,因为原始文件使用Windows回车符,它们被传递给变量,然后传递给ncftp,然后暂停。
修复它通过使用其他文本编辑器,或使用dos2unix。理想情况下,您首先使用dos2unix,然后更改文本编辑器。
或者(但真的,真的不推荐),你可以只解析变量和删除多余\ r,像下面,特别是当问题出现在一些输入读数,这并不似乎是这里的情况。
HOST=${HOST%\\r}
USER=${USER%\\r}
PASSWD=${PASSWD%\\r}
从Windows复制文本或者在没有合适的软件的情况下进行编辑时请注意。
我无法正确理解这一点:如果您使用值而不是变量运行脚本,脚本会起作用吗? – fedorqui 2013-02-14 15:32:27
你可以发布运行'sh -x'的结果吗? –
Raad
2013-02-14 15:35:53
@fedorqui如果用户名是pluto,我做ncftp -u pippo -p狗xxx.x.xx.xx它可以工作。如果我传递它不包含的变量 – rschirin 2013-02-14 16:00:13