gpt4 book ai didi

Bash - 转义 SSH 命令

转载 作者:行者123 更新时间:2023-11-29 08:55:57 24 4
gpt4 key购买 nike

我有一组脚本,可用于通过 FTP 下载文件,然后将其从服务器上删除。

它的工作原理如下:

for dir in `ls /volume1/auto_downloads/sync-complete`
do
if [ "x$dir" != *"x"* ]
then
echo "DIR: $dir"

echo "Moving out of complete"
# Soft delete from server so they don't get downloaded again
ssh dan@172.19.1.15 mv -v "'/home/dan/Downloads/complete/$dir'" /home/dan/Downloads/downloaded

现在 $dir 可以是“This is a file”,它工作正常。

我遇到的问题是特殊字符,例如:

  • “这是(一个)文件”
  • 这是一个文件和东西"

容易出错:

bash: -c: line 0: syntax error near unexpected token `('
bash: -c: line 0: `mv -v '/home/dan/Downloads/complete/This is (a) file' /home/dan/Downloads/downloaded'

我不知道如何对它进行转义,以便对变量进行评估并正确转义命令。我尝试了转义字符、文字引号、普通引号等的各种组合

最佳答案

如果双方都使用 bash,您可以使用 printf '%q ' 转义参数,例如:

ssh dan@172.19.1.15 "$(printf '%q ' mv -v "/home/dan/Downloads/complete/$dir" /home/dan/Downloads/downloaded)"

关于Bash - 转义 SSH 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16887513/

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