gpt4 book ai didi

Bash 无意中拆分命令

转载 作者:行者123 更新时间:2023-11-29 09:50:20 25 4
gpt4 key购买 nike

目前我有一个 rsync 命令,由于网络状况不佳,它每大约 15 分钟失败一次。我已经编写了一个脚本来重新运行 rsync,但是该脚本没有按预期工作,因为 bash 无意中破坏了我传入的命令:

$ cat exit-trap.sh
#!/bin/bash
count=1

while :
do
echo ==============
echo Run \#$count
$@
if [[ $? -eq 0 ]] ; then
exit
fi
echo Run \#$count failed
let count++
sleep 15
done

$ ./exit-trap.sh rsync --output-format="@ %i %n%L" source::dir target
==============
Run #1
Unexpected remote arg: source::dir
rsync error: syntax or usage error (code 1) at main.c(1348) [sender=3.1.1]

在摸索了一段时间后,我猜 argv 中的 rsync 接收到的是 `["rsync", "--output-format=@", "%i", "%n%L", "source::dir “, “目标”]。输出格式似乎无意中被分割成单独的部分,导致语法错误。有办法解决这个问题吗?

PS:到目前为止,我还尝试了 sh -c $@sh -c\"$@\"

  • ./exit-trap.sh rsync --output-format=\"@ %i %n%L\"source::dir target

  • ./exit-trap.sh rsync --output-format=\\\"@ %i %n%L\\\"source::dir target

  • ./exit-trap.sh "rsync --output-format=\"@ %i %n%L\"source::dir target"

这些都不起作用。

最佳答案

您需要按照此处所述使用"$@" https://www.gnu.org/software/bash/manual/html_node/Special-Parameters.html#Special-Parameters :

($@) Expands to the positional parameters, starting from one. When the expansion occurs within double quotes, each parameter expands to a separate word. That is, "$@" is equivalent to "$1" "$2" ….

关于Bash 无意中拆分命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49977239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com