我正在运行一个 bash 脚本,该脚本对包含多个文件的目录执行 rclone。但是,bash 命令没有完成,而是收到重复警告。下面你会找到我的 bash 文件
#!/bin/bash
echo "starting f2f perf tests"
source="/datadrive/0B-2500Files"
target="/mnt/perftest"
cd "${source}"
#ls /datadrive/Empty-Dir-Structure-250K | xargs -n1 -P4 -I% rsync -Pa % /datadrive/Empty-Dir-Structure-250K
rclone sync {source} {target} --transfers 256 --checkers 256 -v --log-file=/tmp/sync.log
time /home/marcelomo/f2f-small-files-one-vm.sh
echo "rclone is done"
输出的错误是:
/bin/bash: warning: shell level (1000) too high, resetting to 1
/bin/bash: warning: shell level (1000) too high, resetting to 1
/bin/bash: warning: shell level (1000) too high, resetting to 1
/bin/bash: warning: shell level (1000) too high, resetting to 1
/bin/bash: warning: shell level (1000) too high, resetting to 1
/bin/bash: warning: shell level (1000) too high, resetting to 1
/bin/bash: warning: shell level (1000) too high, resetting to 1
...
这个警告只会重复出现。我的 bash 脚本正在调用自身吗?我确认源目录和目标目录存在。此外,我可以使用 rsync 移动文件,但仅使用 rclone 时才会收到此重复警告。
我最终想要做的是记录 rclone 不同文件大小所需的时间,通过运行 bash 脚本使用 --transfers 参数改变并行传输的数量。
任何建议将不胜感激,谢谢!
答案1
该time
关键字运行给定的实用程序并报告运行它所花费的时间。
由于您从脚本内部调用脚本本身,因此time
运行脚本将涉及time
使用脚本进行调用,而脚本又会time
使用脚本进行调用,依此类推,直到内存耗尽。
简而言之,您已经成功创建了一个无限递归脚本。
要解决此问题,只需删除整行调用,并仅在从命令行或调用脚本的任何位置的 cron 计划调用脚本时time
使用。time
此外,您在对 的调用中使用了{source}
和。这些可能应该分别读为和。{target}
rclone
"$source"
"$target"