我有一个完全可用的 bash 脚本来下载所有 sftp 文件,将 .xlsx 文件转换为 .csv 并删除 .xlsx 文件。它适用于linux环境。但是,在 informatica 工作流程中通过会话前命令调用相同的脚本时,while(将 .xlsx 转换为 csv 文件)循环被跳过,只下载文件。您可以看到以下错误,“间接输入文件不包含文件名”,因为它位于 while 循环内。
#!/bin/bash
export Src_Dir=/path/
File1=/path/*.*
DATE=`date +"%Y-%m-%d"`
Host_Name=username@hostname
Pass_Pwd='paswword'
PORT=22
cd "$Src_Dir" || { echo 'Failed to chdir into $Src_Dir' ; exit 0; }
/usr/bin/expect<<EOD
spawn /usr/bin/sftp -o Port=${PORT} username@hostname
expect "password:"
send "$Pass_Pwd\r"
expect "sftp>"
send "lcd ${Src_Dir}\r"
expect "sftp>"
send "mget ${File1}\r"
expect "sftp>"
send "mget ${File1}\r"
expect "sftp>"
send "bye\r"
EOD
echo "Download done"
while IFS= read -r -d $'\0' file; do
ssconvert "$file" --export-type=Gnumeric_stf:stf_csv
ls *.csv > Filenames.txt
done < <(find "$Src_Dir" -type f -iname "*.xlsx" -print0)
rm *.xlsx
exit 0