linux - 如何在 bash 脚本中启动后台 lftp session ?

标签 linux bash stdout

我想将 FTP session 与文件描述符相关联,文件描述符将在整个脚本中引用它。包括周期。

例如像这样的东西。但它没有做到。

#!/bin/bash
#start of script
exec {ftpdescriptor}<> >(lftp -u $ftpuser,$ftppass $ftpip/$ftptd)

# code

(echo "ls" 1>&"$ftpdecriptor")> myanswer

# code

echo "bye" 1>&"$ftpdecriptor"
exec {ftpdescriptor}>&-
exit 0
# end of script

它有效,但答案总是输出到标准输出..

最佳答案

这样解决了问题

# start of script
ftpout=$(mktemp)
$timetowaitftp
exec {ftpin}> >(lftp -u $ftpuser,$ftppass $ftpip/$ftptd > $ftpout)
printf >&$ftpin "set net:timeout 10\n"
function ftpio {
    :>$ftpout
    printf >&$ftpin "$1\n"
    i=0
    while [ ! $2 ] && [ ! -s $ftpout ] && [ $i -lt 10 ]; do
        # echo "waiting answer from ftp 1 sec.."
        sleep 1;
        let i=i+1
    done
}

# code

ftpio "cd /modx" "nowait" # no output of cd command.
ftpio "ls"
cat $ftpout
sleep 15
ftpio "pwd"
cat $ftpout
#ftpio "put /var/www/vhosts/modx/backups/20160121.113318.tar.gz" "nowait" # 12Gb
#ftpio "put /var/www/vhosts/modx/backups/20150930.092338.tar.gz" "nowait" # 800mb

# /code

# end of script
printf 1>&"$ftpin" "bye\n"
exec {ftpin}>&-
rm $ftpout

ftpin - 命名描述符

ftpout - 带有最后一个 ftp 应答的临时文件

关于linux - 如何在 bash 脚本中启动后台 lftp session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37875796/

相关文章:

c++ - C++ 中的 BinaryWriter 和 BinaryReader

linux - 球体边缘的伪影 - 照明不正确?

bash - crontab 的值无效

java 和 libGDX/LWJGL 游戏全屏尺寸错误,适用于 Ubuntu 上的多个显示器

linux - 移动目录排除文件

macos - 无法在 Terminal.app OSX 上使用 Ctrl+A 和 Ctrl+E(bash 键绑定(bind))

正则表达式 Linux bash

对 stdin、stdout 和 stderr 的工作方式感到困惑

C stderr 到一个文件

python - 获取 STDOUT、STDERR 而不等待进程退出