shell脚本中的三重嵌套引号

2024-03-09

我正在尝试编写一个 shell 脚本来调用另一个脚本,然后执行 rsync 命令。 第二个脚本应该在它自己的终端中运行,所以我使用gnome-terminal -e "..."命令。该脚本的参数之一是一个字符串,其中包含应提供给 rsync 的参数。我把它们放在单引号中。 到目前为止,一切都工作正常,直到 rsync 参数之一是包含空格的目录路径。我尝试了“、”、\“、\”的多种组合,但脚本要么根本不运行,要么只采用路径的第一部分。

这是我正在使用的代码的稍作修改的版本

gnome-terminal -t 'Rsync scheduled backup' -e "nice -10 /Scripts/BackupScript/Backup.sh 0 0 '/Scripts/BackupScript/Stamp' '/Scripts/BackupScript/test' '--dry-run -g -o -p -t -R -u --inplace --delete -r -l '\''/media/MyAndroid/Internal storage'\''' "

Within Backup.sh运行此命令

rsync $5 "$path"

目的地在哪里$path根据中的文本计算Stamp.

如何实现这三层嵌套引用?

这些是我刚才看到的一些问题(我之前也尝试过其他来源)

  • https://unix.stackexchange.com/questions/23347/wrapping-a-command-that-includes-single-and-double-quotes-for-another-command https://unix.stackexchange.com/questions/23347/wrapping-a-command-that-includes-single-and-double-quotes-for-another-command
  • 如何使嵌套双引号在 bash 解释器中幸存下来? https://stackoverflow.com/questions/6270882/how-to-make-nested-double-quotes-survive-the-bash-interpreter
  • 在 bash 中使用多层引号 https://stackoverflow.com/questions/8757163/using-multiple-layers-of-quotes-in-bash
  • 嵌套引号 bash https://stackoverflow.com/questions/18880901/nested-quotes-bash

我未能成功地将解决方案应用于我的问题。


这是一个例子。caller.sh uses gnome-terminal执行foo.sh,依次打印所有参数,然后调用rsync与第一个参数。

来电者.sh:

#!/bin/bash
gnome-terminal -t "TEST" -e "./foo.sh 'long path' arg2 arg3"

foo.sh:

#!/bin/bash
echo $# arguments
for i; do    # same as: for i in "$@"; do
    echo "$i"
done
rsync "$1" "some other path"

Edit: If $1包含 rsync 的几个参数,其中一些是长路径,上面的方法不起作用,因为 bash 要么通过"$1"作为一个参数,或者$1作为多个参数,将其拆分而不考虑包含的引号。

有(至少)一种解决方法,您可以按如下方式欺骗 bash:

来电者2.sh:

#!/bin/bash
gnome-terminal -t "TEST" -e "./foo.sh '--option1 --option2 \"long path\"' arg2 arg3"

foo2.sh:

#!/bin/bash
rsync_command="rsync $1"
eval "$rsync_command"

这相当于输入rsync --option1 --option2 "long path"在命令行上。

WARNING:此黑客行为引入了一个安全漏洞,$1如果用户对字符串内容有任何影响(例如'--option1 --option2 \"long path\"; echo YOU HAVE BEEN OWNED'会跑rsync进而execute the echo命令)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

shell脚本中的三重嵌套引号 的相关文章

  • 如何将字典转换为字符串

    我正在尝试使用提供的解决方案here https stackoverflow com questions 5192753 how to get the number of occurrences of each character usin
  • 如何在linux中以编程方式获取dir的大小?

    我想通过 C 程序获取 linux 中特定目录的确切大小 我尝试使用 statfs path struct statfs 但它没有给出确切的大小 我也尝试过 stat 但它返回任何目录的大小为 4096 请建议我如何获取 dir 的确切大小
  • 字符串替换多个值

    我有一个看起来像这样的字符串 布拉布拉 亚达亚达 布拉布拉 亚达亚达 有没有办法只替换前两个 或最后两个 以便我可以获得下一个输出 Bla bla a href link1 yada yada a bla bla yada yada 如有必
  • 隐式将 string 转换为 string_view

    void Foo1 string view view string str one two three Foo1 one two three Implicitly convert char to string view Foo1 str I
  • Java:字符串连接和变量替换的最佳实践[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 在 Java 中连接字符串和添加变量值的方法有太多 我应该如何选择一个 优点 缺点 最佳用例等 MessageFormat forma
  • 使用非规范地址检索内存数据会导致 SIGSEGV 而不是 SIGBUS

    我无法使用以下汇编代码产生 总线错误 这里我使用的内存地址不是合法的 规范地址 那么 我怎样才能触发该错误呢 我在带有 NASM 2 14 02 的 Ubuntu 20 04 LTS 下运行这段代码 但它会导致负载出现 SIGSEGV 分段
  • 添加文件时运行 shell 命令

    我的 Linux 机器上有一个名为 images 的文件夹 该文件夹连接到一个网站 该网站的管理员可以向该网站添加图片 但是 当添加图片时 我想要一个命令来运行调整目录中所有图片的大小 简而言之 我想知道当新文件添加到特定位置时如何使服务器
  • 并行运行 shell 脚本

    我有一个 shell 脚本 打乱大型文本文件 600 万行和 6 列 根据第一列对文件进行排序 输出 1000 个文件 所以伪代码看起来像这样 file1 sh bin bash for i in seq 1 1000 do Generat
  • 在 vc++ 中将 'System::String ^' 转换为 'const char *'

    如何在 vc 中将 System String 转换为 const char My code String Result1 C Users Dev Desktop imag jpg IplImage img1 cvLoadImage Res
  • 为什么这个符号链接创建了两个实例

    我有一个用于我的点文件的安装脚本 我用来创建一个目录到我的主文件夹的符号链接 这些链接执行得很好 但创建了第二个符号链接 我无法解释为什么 项目中的文件夹结构如下所示 install sh scripts shell sh shell in
  • 使用 MAX_ORDER / 包含 mmzone.h

    根据https www kernel org doc Documentation networking packet mmap txt https www kernel org doc Documentation networking pa
  • “/bin/bash -l”无效选项

    好吧 我正在尝试在我们的超级计算机上运行隐藏为一项作业的串行 MPI 作业 主要提交脚本基本上如下所示 bin bash l PBS l nodes 4 ppn 8 walltime 24 00 00 cat PBS NODEFILE un
  • Bash - 在与当前终端分开的另一个终端中启动命令的新实例

    我有一个简单的 bash 脚本 test sh 设置如下 bin bash args if args 0 check capture then watch n 1 ls lag home user capture0 watch n 1 ls
  • 无法理解寄存器和变量之间的汇编mov指令

    我在 64 位 Linux 上使用 NASM 汇编器 有一些关于变量和寄存器的东西我无法理解 我创建一个名为 msg 的变量 msg db hello world 现在 当我想写入标准输出时 我移动msg to rsi注册 但我不明白mov
  • 在 bash 脚本中检测鼠标点击

    我想知道如何在后台运行 bash 脚本 每当用户单击鼠标时该脚本都会执行某些操作 即运行脚本或命令或其他任何内容 即使终端关闭 我也希望它继续运行 有任何想法吗 谢谢 如果您使用的是X11 您可以尝试xdotool捕获鼠标事件 它会是这样的
  • 按字符分割字符串

    scala 有一个标准的分割字符串的方法StringOps split 但它的行为有点让我惊讶 演示一下 使用快捷便利功能 def sp str String str split toList 以下表达式全部计算结果为 true sp Li
  • realloc():重新分配为 char * 上的 strcat 腾出空间时下一个大小无效 [重复]

    这个问题在这里已经有答案了 我在以下代码中收到无效内存错误 printf s n FINE 5 printf s LENGTH IS d n FINE 6 strlen buffer char realloc buffer strlen b
  • 绕过 dev/urandom|random 进行测试

    我想编写一个功能测试用例 用已知的随机数值来测试程序 我已经在单元测试期间用模拟对其进行了测试 但我也希望用于功能测试 当然不是全部 最简单的方法是什么 dev urandom仅覆盖一个进程 有没有办法做类似的事情chroot对于单个文件并
  • 如何在 *nix 中登录时运行脚本?

    我知道我曾经知道如何做到这一点 但是 如何在 unix 中登录时运行脚本 bash 可以 From 维基百科 Bash http en wikipedia org wiki Bash 28Unix shell 29 当 Bash 启动时 它
  • Linux 为一组进程保留一个处理器(动态)

    有没有办法将处理器排除在正常调度之外 也就是说 使用sched setaffinity我可以指示线程应该在哪个处理器上运行 但我正在寻找相反的情况 也就是说 我想从正常调度中排除给定的处理器 以便只有已明确调度的进程才能在那里运行 我还知道

随机推荐

  • 计算新列作为 pandas 中其他列的平均值[重复]

    这个问题在这里已经有答案了 我有一个这个数据框 我想计算一个新列作为平均值salary 1 salary 2 and salary 3 df pd DataFrame salary 1 230 345 222 salary 2 235 37
  • 如何跟踪 C++ 中的内存分配(尤其是新建/删除)[重复]

    这个问题在这里已经有答案了 我如何跟踪 C 中的内存分配 尤其是由new delete 对于一个对象 我可以轻松地覆盖operator new 但我不确定如何全局覆盖所有分配 以便它们通过我的自定义new delete 这应该不是一个大问题
  • 另一种 Quantmod ZigZag 叠加

    我目前正在使用quantmodZigZag 叠加 我注意到它的计算方式与原始叠加有点不同 我已经证明了以下差异picture https i stack imgur com YER0M gif使用 ZigZag 5 的 RDWRquantm
  • 如何在没有第一次提交的情况下撤消 git rm -rf dirname ?

    I did git init git add git rm rf dirname 看了其他答案 git reset hard HEAD git checkout f and git reflog不起作用 显然是因为没有可以返回的 HEAD
  • 如何在同一页面切换多个react组件

    我有一个使用 Material ui 列表构建的用户仪表板 对于每个 listItem 我都有一个组件 我想要的是 当我单击列表元素时 有一个专门用于切换组件的部分 我在实现这个时遇到困难 这是我的代码 我不知道该放在哪里onClick处理
  • SecurityException:权限拒绝:通过显式意图启动 Activity 时

    我正在读关于在活动中声明权限 https developer android com guide components activities intro activities dp 根据文档 您可以使用清单的标签来控制哪些应用程序可以启动特
  • 在 QVBoxLayout 中查找选中的 QRadioButton

    我使用下面的代码动态创建一组单选按钮 self wPaymantType qgbSomeSelectionGroup QtGui QGroupBox vbox QtGui QVBoxLayout for row in listOfChoic
  • 使用VB.Net获取图像宽度和高度

    在 VB net 中 我需要读取一个充满图像的文件夹并获取它们 文件名 像素高度和像素宽度 并将它们的值分配给各个变量 thanks Mike 尝试这个 Imports System IO Imports System Drawing Mo
  • cmdline-tools:无法确定 SDK 根目录

    C Android sdk bin gt sdkmanager错误 无法确定 SDK 根目录 错误 要么明确指定它 sdk root 或将此包移动到预期位置
  • 从两个向量(名称、值)创建命名列表

    有没有办法在两个向量上使用 mapply 来构造命名列表 第一个向量的类型为character并包含用于列表的名称 而第二个包含值 到目前为止 我唯一的解决方案是 gt dummyList list gt addToList lt func
  • 流星没有开始

    我在启动 Meteor 示例时遇到问题 这就是我打字时得到的meteor在应用程序文件夹中 parties Unexpected mongo exit code 100 Restarting Unexpected mongo exit co
  • 使用 Phonegap 和 AngularJS 的 HTML5 模式

    我正在尝试使 AngularJS html5 模式 true 与 Phonegap 一起使用 我之前做了很多搜索来发布这个 我尝试了不同的组合 配置 在元中添加 标签 也尝试使用 和 添加 html 后缀到路由端点 在 config 块内添
  • 如何选择每月最高消费客户

    我有一个列出日期 customerID orderID 和 orderCost 的视图 如何选择每月最高消费客户 该数据仅涵盖2015年的六个月时间 我能够获得每个客户每月花费的总和 但不能获得最大支出客户 SELECT EXTRACT Y
  • 独立的 getter/setter 方法,还是组合的?

    在处理一个项目时 我一直在进行一些更改并浏览现有框架 API 文档以获取见解 在仔细阅读 Kohana 文档时 我注意到任何给定类的 getter setter 通常都是组合在一起的 public function someProperty
  • iOS拍照倒放的处理方法

    我在网站上使用输入字段 以便用户可以给自己拍照 在 iPad iPhone 上 生成的图片是颠倒的 如何轻松检测用户是否使用相机 以便我通过 Javascript 旋转图像 之后我在 Javascript Canvas 中使用该图片 我得到
  • 使用通用通配符代替接口

    如果你想存储类型的对象数组MyInterface 以下两种形式都可以接受吗 如果可以的话 您什么时候会使用第二种形式而不是第一种形式 i 仅使用一个接口 List
  • Matplotlib 绘图窗口未使用 command-w 关闭

    我在我的Mac上使用ipython3 版本如下 Python 3 5 2 Anaconda custom x86 64 default Jul 2 2016 17 52 12 and matplotlib版本2 0 0 我改变了后端maco
  • 哎呀!使用保留字来命名列

    我制作了一个 bigquery 表 其中有一列名为 row 无引号 doh 现在 如果我引用该列 我的 sql 将无法编译 SELECT row etext FROM hcd hdctext LIMIT 1 ERROR 我没有看到 ROW
  • 如何在Java中使用snake yaml序列化具有自定义名称的字段

    我正在尝试序列化具有如下字段的 Java 实例 public class Person private String firstName private String lastName public String getFirstName
  • shell脚本中的三重嵌套引号

    我正在尝试编写一个 shell 脚本来调用另一个脚本 然后执行 rsync 命令 第二个脚本应该在它自己的终端中运行 所以我使用gnome terminal e 命令 该脚本的参数之一是一个字符串 其中包含应提供给 rsync 的参数 我把