与 Marc B 的回答相同,我认为您无法在 lftp 内完成所有操作。特别是我不认为它支持用户变量......(我应该检查......)
因此,出于某些目的,您可以在 lftp 脚本中调用用于启动 lftp 的 shell。例如:
# This is a lftp script (like yours)
ls -tr| ! "tail -1|awk '{print $NF}'"
“!”之后的所有内容 传递给 Unix shell。被调用的“尾巴”是系统尾巴,而不是一些 lftp 命令。awk 也是如此,我用它来仅获取目录的名称(lftp 的 ls 提供所有文件权限等......)
对于更复杂的事情(根据您的要求),我相信您最好使用使用 lftp 的 shell 脚本,就像任何其他 shell 命令一样。您的示例将变为:
# 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 命令来解决,以便第二次成功,而无需 lftp 进一步协商。
希望这有助于走上正轨!干杯。