将FTP OUTPUT重定向到文件时,我将所有输出都放在一行中。我的要求是如果目录被更改或文件被列出,一切都应该在单独的行而不是单行。请指教。
FTPOUT=`ftp -inv << EOF
open $FTP_SERVER
user $USER_NAME $PASSWORD
cd $FILE_DIR
ascii
nlist ${fileName} $FILE_DIR_LIST
close
bye
EOF` > testfile.txt
当前输出样本:
250 Directory successfully changed. 200 Switching to ASCII mode. 227 Entering Passive Mode (165,32,41,174,29,231). 150 Here comes the directory listing. 226 Directory send OK. 221 Goodbye.
预期产出:
250 Directory successfully changed.
200 Switching to ASCII mode.
227 Entering Passive Mode (165,32,41,174,29,231).
150 Here comes the directory listing.
226 Directory send OK.
221 Goodbye.
答案 0 :(得分:0)
常规:使用$()
而不是后退来获取命令。使用小写变量名称
不要将输出分配给变量并尝试同时重定向(当需要时,请使用tee
)。
在使用换行符回显变量时使用双引号(除非您知道不使用它们的充分理由,否则始终使用双引号)。
结果:
# You should change other variable names too
ftpout=$(ftp -inv << EOF
open ${FTP_SERVER}
user ${USER_NAME} ${PASSWORD}
cd ${FILE_DIR}
ascii
nlist ${fileName} ${FILE_DIR_LIST}
close
bye
EOF
)
echo "${ftpout}"