在循环内调用 sftp 脚本时循环退出
Loop exit while calling the sftp script inside the loop
我写了一个名为 process.sh 的 shell 脚本,它在循环内调用 sftp 脚本 del.sh。但是一旦调用 sftp 脚本(del.sh),它就不会返回到 process.sh
Process.sh
#!/bin/bash
for i in $(ls *.csv)
do
fbname=$(basename "$i" .csv)
echo "$fbname"
if [ -f $fbname.done ]
then
gzip $fbname.csv
exec /home/amithsa/del.sh $fbname.csv
else
echo "File Not Found"
fi
done;
del.sh
#!/usr/bin/expect
set arg1 [lindex $argv 0]
spawn sftp xyz@10.10.10.10 22
expect "password:"
send "xxxxxxxxx\n"
expect "sftp>"
send "cd sftp\n"
expect "sftp>"
send "rm $arg1\n"
expect "sftp>"
send "rm *.html\n"
expect "sftp>"
send "exit\n"
interact
如果您希望脚本继续运行,请不要使用 exec
。 exec
将用您给它的命令完全替换当前进程。它永远不会 returns1.
就像调用 gzip
和 echo
以及其他命令一样调用您的脚本,即直接调用。
gzip $fbname.csv
/home/amithsa/del.sh $fbname.csv
1 除非该命令无法执行并且,并且您启用了 execfail
选项。或者您是 运行 互动 shell.
我写了一个名为 process.sh 的 shell 脚本,它在循环内调用 sftp 脚本 del.sh。但是一旦调用 sftp 脚本(del.sh),它就不会返回到 process.sh
Process.sh
#!/bin/bash
for i in $(ls *.csv)
do
fbname=$(basename "$i" .csv)
echo "$fbname"
if [ -f $fbname.done ]
then
gzip $fbname.csv
exec /home/amithsa/del.sh $fbname.csv
else
echo "File Not Found"
fi
done;
del.sh
#!/usr/bin/expect
set arg1 [lindex $argv 0]
spawn sftp xyz@10.10.10.10 22
expect "password:"
send "xxxxxxxxx\n"
expect "sftp>"
send "cd sftp\n"
expect "sftp>"
send "rm $arg1\n"
expect "sftp>"
send "rm *.html\n"
expect "sftp>"
send "exit\n"
interact
如果您希望脚本继续运行,请不要使用 exec
。 exec
将用您给它的命令完全替换当前进程。它永远不会 returns1.
就像调用 gzip
和 echo
以及其他命令一样调用您的脚本,即直接调用。
gzip $fbname.csv
/home/amithsa/del.sh $fbname.csv
1 除非该命令无法执行并且,并且您启用了 execfail
选项。或者您是 运行 互动 shell.