我编写了一个名为 process.sh 的 shell 脚本,它在循环内调用 sftp 脚本 del.sh。但是一旦调用 sftp 脚本(del.sh),它就不会返回到 process.sh
进程.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
将用您给出的命令完全替换当前进程。它永远不会返回1。
只需像调用 gzip
和 echo
以及其他命令一样调用脚本即可,即直接调用。
gzip $fbname.csv
/home/amithsa/del.sh $fbname.csv
1 除非该命令无法执行,并且您启用了 execfail
选项。或者您正在运行交互式 shell。
关于linux - 在循环内调用 sftp 脚本时循环退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28022837/