ftp -v -n <<EOF
open 192.168.0.1
user Administrator Password
prompt
mput *.deb
EOF
在这之后的命令就不执行了,运行shell提示
211 Goodbye.
在使用ftp
命令进行FTP操作时,需要注意以下几点:
ftp
命令在执行完输入的FTP命令后会退出,因此在EOF标记之后的命令不会被执行。expect
等工具来自动化交互。下面是两种实现方式的示例:
ftp -v -n <<EOF &
open 192.168.0.1
user Administrator Password
prompt
mput *.deb
EOF
# 继续执行其他命令
echo "FTP操作已完成"
在上述示例中,ftp
命令被放在后台执行,因此脚本会继续执行其他命令。
如果你希望在FTP操作期间自动化处理交互,可以使用expect
工具。expect
可以模拟人工输入并与FTP服务器进行交互。以下是一个示例:
#!/usr/bin/expect -f
spawn ftp -v -n 192.168.0.1
expect "Name"
send "Administrator\r"
expect "Password"
send "Password\r"
expect "ftp>"
send "prompt\r"
expect "ftp>"
send "mput *.deb\r"
expect "ftp>"
send "bye\r"
# 继续执行其他命令
puts "FTP操作已完成"
请根据你的需求选择适合的方式来处理FTP操作后的命令执行。
可能是由于FTP命令失败或者异常的退出导致脚本终止。
这是因为bash脚本在一条命令执行失败后,默认会继续执行后面的命令,但是如果你设置了“set -e”或者“set -o errexit”,则会在命令失败后立即退出。
在你的情况下,试下面几种解决办法:
将FTP命令放在一个子shell中,这样即使FTP命令失败,也不会影响到主脚本的执行。这可以通过在FTP命令前后加上括号实现:
(
ftp -v -n <<EOF
open 192.168.0.1
user Administrator Password
prompt
mput *.deb
EOF
) || echo "FTP command failed"
这里,如果FTP命令失败,会打印出"FTP command failed",但是脚本会继续执行。
用"set +e"命令来暂时关闭“在命令失败时退出”的设置,然后在FTP命令之后再用"set -e"命令恢复这个设置:
set +e
ftp -v -n <<EOF
open 192.168.0.1
user Administrator Password
prompt
mput *.deb
EOF
set -e
这样,即使FTP命令失败,后面的命令也会继续执行。
采用chatgpt:
在Shell脚本中,当使用FTP命令登录并执行完操作后,后续命令无法执行的原因是FTP命令会启动一个新的子shell来处理FTP会话,然后在FTP会话结束后返回到主shell。
为了解决这个问题,可以将FTP命令放在后台执行,这样主shell可以继续执行后续命令。可以使用&符号将FTP命令放到后台执行,然后使用wait命令等待后台任务完成。下面是修改后的脚本示例:
#!/bin/bash
ftp -v -n <<EOF &
open 192.168.0.1
user Administrator Password
prompt
mput *.deb
bye
EOF
wait
# 在FTP命令执行完成后,继续执行后续命令
echo "FTP操作已完成,继续执行后续命令..."
# 在这里写入你的后续命令
在上面的示例中,&符号将FTP命令放到后台执行,然后使用wait命令等待后台任务完成。一旦FTP命令执行完成,主shell会继续执行后续命令。
请注意,bye命令用于在FTP会话结束时关闭连接。你可以在EOF块的最后添加其他FTP命令或更改FTP命令来满足你的需求。
希望这可以帮助到你!
FTP命令会占用标准输入STDIN,所以在FTP命令结束后,需要使用EOF结束标记来告诉一下shell已经输入完毕,否则之后的命令会被当作FTP的命令的输入,就导致无法执行了。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢