[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产生问题当然。

+0

我无法正确理解这一点:如果您使用值而不是变量运行脚本,脚本会起作用吗? – fedorqui 2013-02-14 15:32:27

+0

你可以发布运行'sh -x '的结果吗? – Raad 2013-02-14 15:35:53

+0

@fedorqui如果用户名是pluto,我做ncftp -u pippo -p狗xxx.x.xx.xx它可以工作。如果我传递它不包含的变量 – rschirin 2013-02-14 16:00:13

您是否在Microsoft Windows上编辑此文件?它不起作用,因为原始文件使用Windows回车符,它们被传递给变量,然后传递给ncftp,然后暂停。

修复它通过使用其他文本编辑器,或使用dos2unix。理想情况下,您首先使用dos2unix,然后更改文本编辑器。

或者(但真的,真的不推荐),你可以只解析变量和删除多余\ r,像下面,特别是当问题出现在一些输入读数,这并不似乎是这里的情况。

HOST=${HOST%\\r} 
USER=${USER%\\r} 
PASSWD=${PASSWD%\\r} 

从Windows复制文本或者在没有合适的软件的情况下进行编辑时请注意。