我有一个脚本,我正在执行sudo并转到特定目录,并在该目录中根据需要编辑文件名。获得所需的文件名后我想在Windows机器上使用FTP文件,但在阅读FTP命令后脚本说 - :
-bash:第19行:引用:未找到命令
-bash:第20行:引用:未找到命令
-bash:第21行:put:未找到命令
-bash:第22行:退出:找不到命令
我的ftp正常工作,如果我正常运行所以它是一些其他问题。脚本在下面 - :
#!/usr/bin/
path=/global/u70/glob
echo password | sudo -S -l
sudo /usr/bin/su - glob << 'EOF'
#ls -lrt
cd "$path"
pwd
for entry in $(ls -r)
do
if [ "$entry" = "ADM" ];then
cd "$entry"
FileName=$(ls -t | head -n1)
echo "$FileName"
FileNameIniKey=$(ls -t | head -n1 | cut -c 12-20)
echo "$FileNameIniKey"
echo "$xmlFileName" >> "$xmlFileNameIniKey.ini"
chmod 755 "$FileName"
chmod 755 "$FileNameIniKey.ini"
ftp -n hostname
quote USER ftp
quote PASS
put "$FileName"
quit
rm "$FileNameIniKey.ini"
fi
done
EOF
答案 0 :(得分:3)
通过包含一个最小的,自包含的示例,您可以改进您的问题并使其更容易回答并对未来的读者更有用。这是一个例子:
#!/bin/bash
ftp -n mirrors.rit.edu
quote user anonymous
quote pass mypass
ls
执行时,您将获得手动FTP会话而不是文件列表:
$ ./myscript
Trying 2620:8d:8000:15:225:90ff:fefd:344c...
Connected to smoke.rc.rit.edu.
220 Welcome to mirrors.rit.edu.
ftp>
问题在于您假设脚本是一系列自动键入终端的字符串。这不是真的。这是一系列一个接一个地执行的命令。
在{em> AFTER quote user anonymous
退出之前,ftp
没有任何反应,然后它作为shell命令运行,而不是写入ftp
命令。
相反,请在命令行中指定登录凭据,然后在here文档中包含命令:
ftp -n "ftp://anonymous:passwd@mirrors.rit.edu" << end
ls
end
这可以按预期工作:
$ ./myscript
Trying 2620:8d:8000:15:225:90ff:fefd:344c...
Connected to smoke.rc.rit.edu.
220 Welcome to mirrors.rit.edu.
331 Please specify the password.
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
200 Switching to Binary mode.
229 Entering Extended Passive Mode (|||19986|).
150 Here comes the directory listing.
drwxrwxr-x 12 3002 1000 4096 Jul 11 20:00 CPAN
drwxrwsr-x 10 0 1001 4096 Jul 11 21:08 CRAN
drwxr-xr-x 18 1003 1000 4096 Jul 11 18:02 CTAN
drwxrwxr-x 5 89987 546 4096 Jul 10 10:00 FreeBSD
答案 1 :(得分:-1)
ftp -n "ftp://anonymous:passwd@mirrors.rit.edu" << end
名称或服务未知