Marc Bの答えと同じ精神で、lftp内ですべてを実行できるとは思いません。特に、ユーザー変数をサポートしているとは思いません...(確認する必要があります...)
したがって、いくつかの目的のために、lftpスクリプト内でlftpを開始するシェルを呼び出すことができます。例えば:
# This is a lftp script (like yours)
ls -tr| ! "tail -1|awk '{print $NF}'"
'!'以降のすべて UNIXシェルに渡されます。呼び出される「テール」はシステムテールであり、一部のlftpコマンドではありません。同じことがawkにも当てはまります。これは、dirの名前のみを取得するために使用します(lftpのlsはすべてのファイルパーミッションなどを提供します...)
より複雑なことについては(あなたの要求に応じて)、他のシェルコマンドと同じようにlftpを使用するシェルスクリプトを使用したほうがよいと思います。あなたの例は次のようになります:
# Call lftp to log in and do 'ls', capture the ouput and process it.
sourceBuildDir=$(lftp -c "open ${sourceEnv}:${sourcePass}@${sourceHost}; ls" \
|tail -1|awk '{print $NF}');
echo "I am about to download $sourceBuildDir";
# Call lftp with the processed dir name and do the rest
# (btw. did you consider using the 'mirror' command?)
lftp -c "open ${sourceEnv}:${sourcePass}@${sourceHost}; \
cd $sourceBuildDir/distribution; mget *";
PS時々、lftpコマンドは「[FEATネゴシエーション...]」のような余分なものを生成し、スクリプトを壊す可能性があります。おそらく、lftpコマンドを2回繰り返すことで解決できるので、2回目は、lftpによるそれ以上のネゴシエーションなしで成功します。
これが正しい軌道に乗るのに役立つことを願っています!乾杯。