shell 如何在bash脚本中运行时打印rsync的输出

6mzjoqzu  于 2023-10-23  发布在  Shell
关注(0)|答案(1)|浏览(143)

我目前有一个bash脚本,可以帮助我rsync一个文件。

# Copy the file over
echo "* Downloading: ${TARGET_FILE_NAME}"
rsync -vh --progress --stats "$TARGET_FILE_PATH" "$USER_PATH" | exit 1)
echo "* Downloading Complete}"

但是当运行脚本时,我只看到

* Downloading SOME_FILE
* Downloading Complete

我很想看到rsync的进展。我试过rsync .... 2>&1,但我似乎不能得到正确的语法。
我也试过:
rsync -vh --progress --stats "$TARGET_FILE_PATH" "$USER_PATH" --log-file=/dev/stdout但这仍然没有打印出任何内容。
我也试过:

rsync -vh --progress --stats "$TARGET_FILE_PATH" "$USER_PATH" | while IFS= read -r line; do
   echo " $line"
done

但这似乎只是在rsync完成后打印出来。

m3eecexj

m3eecexj1#

要在传输过程中捕获rsync的输出并立即打印它,可以使用以下方法。

#!/bin/bash

TARGET_FILE_PATH="source_path/target_file"
USER_PATH="destination_path/"
TARGET_FILE_NAME="target_file"

# Copy the file over
echo "* Downloading: ${TARGET_FILE_NAME}"
rsync -vh --progress --stats "$TARGET_FILE_PATH" "$USER_PATH" &
RSYNC_PID=$!

# Wait for the rsync process to finish and capture its output
wait "$RSYNC_PID"
EXIT_STATUS=$?

if [ $EXIT_STATUS -eq 0 ]; then
    echo "* Downloading Complete"
else
    echo "* Downloading Failed"
fi

在此脚本中,我们在后台使用&启动rsync命令,并将其进程ID(PID)存储在RSYNC_PID变量中。然后,我们使用wait命令等待rsync进程完成。
通过在后台运行rsync进程,脚本可以继续执行并显示类似“* 正在下载:...”和“* Downloading Complete”,而rsync正在运行。rsync的进度和输出将照常显示,因为它在同一个终端中运行。
rsync进程完成后,我们在EXIT_STATUS变量中捕获其退出状态,并相应地显示下载完成或下载失败

相关问题