如何传递包含引号/空格的脚本参数?

2023-11-25

我正在尝试写一个脚本notify-finish可以添加到任何命令的前面。完成后,它将运行以下参数给出的命令,然后在命令完成后向用户发送电子邮件。这是我所拥有的:

PROG=$1
# Run command given by arguments
$@
ECODE=$?
echo -e "Subject: `hostname`: $PROG finished\r\nTo: <$USER>\r\n\r\nExited with $ECODE\r\n" | sendmail $USER

这在大多数情况下都有效,但是当参数包含空格时,引号就会被去掉。

工作示例:

notify-finished rsync -avz source/ user@remote:dest/

失败示例:

notify-finished rsync -avz -e 'ssh -c blowfish' source/ user@remote:dest/

在第二种情况下,$@扩展到rsync -avz -e ssh -c blowfish source user@remote:dest/,缺少单引号。它不适用于双引号,也不适用于$*.

阅读其他帖子后,我尝试将命令放入数组中,但我遇到了完全相同的问题:

CMD=(notify-finished rsync -avz -e 'ssh -c blowfish' source/ user@remote:dest/)
${CMD[@]}

我如何使这个适用于所有论点?


Use "$@" with quotes:

prog="$1"
"$@"
ecode="$?"
echo "$prog exited with $ecode"

这将完全按照收到的情况传递每个参数。如果不包含引号,每个元素将根据$IFS:

  • "$@"就好像"$1" "$2" "$3" ...,将每个元素作为单独的参数传递。
  • "$*"就好像"$1 $2 $3 ...",将所有串联的元素作为单个参数传递
  • $* and $@就好像$1 $2 $3 ...,在空格上分解每个元素,展开所有的全局对象,并将每个结果单词作为单独的元素传递($IFS).

对于数组也是如此,比如"${array[@]}" and "${array[*]}"

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

如何传递包含引号/空格的脚本参数? 的相关文章

  • Bash 脚本:语法错误:意外的文件结尾[重复]

    这个问题在这里已经有答案了 我有以下文件 并且该文件上有 chmod a x 当我尝试运行它时 出现第 75 行 语法错误 意外的文件结尾 我的脚本有什么错误 我需要做什么来修复它 bin sh log directory for ascp
  • $PATH 中 /usr/bin 和 /usr/local/bin 等的顺序

    在我的 Mac 上 我经常使用 bash 对于我的环境设置 我添加了 usr bin and usr local bin into PATH就像我平常做的那样 虽然我知道什么 usr bin and usr local bin关于 我很好奇
  • bash 别名中允许使用哪些字符[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我最近添加了 alias cd alias cd alias cd 到我的 bash aliases 文件 玩弄这个 我注意到在别名时 被
  • > 有必要吗?

    我现在开发网站和 XML 接口已有 7 年了 从来没有遇到过真正有必要使用 gt for a gt 到目前为止 所有消歧都可以通过引用来处理 lt and alone 有没有人遇到过这样的情况 与 SGML 处理 浏览器问题 XSLT 等相
  • 使用 GitHub 时防止将大文本文件添加到提交

    我们想要防止 非常大的文本文件 每个文件 gt 50MB 被提交到git代替git lfs 因为它们夸大了 git 历史 问题是 其中 99 大小差异的原因 这些是 YAML 文件 它们支持通过 Base64 编码进行二进制序列化 我们无法
  • 在docker镜像中运行多个脚本

    您好 我想知道是否可以在 docker 容器启动时自动同时运行两个脚本 第一个脚本必须运行客户端应用程序 第二个脚本必须运行服务器应用程序作为后台 You can use CMD在你的Dockerfile https docs docker
  • bash双括号问题

    我对 bash 脚本非常陌生 在使用双括号时遇到了问题 我似乎无法让它们在 Ubuntu Server 11 10 中工作 我的下面的脚本位于 if test sh 中 bin bash if 14 14 then echo FOO fi
  • 解析 HTTP 标头值:引用、RFC 5987、MIME 等

    让我困惑的是 HTTP 标头的解码values 示例标头 Some Header quoted string utf 8 en Weirdness 罐头value s被引用 a 的编码怎么样 本身 是 有效的引号字符 分号有什么意义 HTT
  • 使用 sed 将 old-link-url 替换为 new-link-url

    我正在 bash 中编写一个脚本 将 old link url 替换为 new link url 我的问题是 sed 由于斜杠而无法替换 url 如果我只输入一些文字就可以了 my code sed e s old link new lin
  • 子 shell 何时继承其父 shell 环境?

    什么情况下将shell的环境传递给子shell 子 shell 始终从父 shell 获取所有变量 man bash将描述所有使用子shell的情况 主要是 command command command and command 所谓环境只
  • sed-删除不包含模式的行

    我很惊讶我在 SO 上找不到与此类似的问题 如何使用 sed 删除所有不包含特定模式的行 例如 我有这个文件 cat kitty dog giraffe panda lion tiger 我想要一个 sed 命令 当调用该命令时 它将删除所
  • 退出 bash 脚本但保持进程运行

    我正在运行服务器 需要使用参数执行以下命令 这些脚本目前工作得很好 但问题是当我运行脚本时我无法返回到控制台 它在控制台中保持运行 如果我强行停止它 那么该过程也会停止 我想继续运行该进程并返回到控制台 bin sh php home st
  • IFS 分隔一个字符串,如“Hello”,“World”,“this”,“is,一个无聊”,“line”

    我正在尝试解析 csv 文件 但 IFS 遇到一些问题 该文件包含如下行 Hello World this is a boring line 各列用逗号分隔 因此我尝试使用以下代码分解该行 IFS read r a tempArr lt l
  • Bash 脚本 - 迭代 find 的输出

    我有一个 bash 脚本 其中需要迭代 find 命令输出的每一行 但似乎我正在迭代 find 命令中的每个单词 以空格分隔 到目前为止我的脚本看起来像这样 folders find maxdepth 1 type d for i in f
  • 使用 mkfifo 和传输流,这可能吗?

    我想执行一个 bash 脚本来执行以下操作 应用程序 ffmpeg 生成实时传输流 ts 文件 我需要处理这个实时流 执行解复用等 现在我知道这必须通过 FIFO 来完成 但这是我的任务 我需要重定向 ffmpeg 的输出以写入 fifo
  • 如何从 powershell 中设置 bash 的环境变量?

    使用powershell我该如何设置 https askubuntu com q 1205227 45156 the 环境 https stackoverflow com q 5327495 262852变量 这里 特别 https sta
  • 自动检测log4j静态初始化错误的方法

    请注意 这更像是 Bash 问题 而不是 Java 问题 请参阅下面的注释 在每个类中配置log4j时 我们执行以下操作 public class Example private static final Logger log Logger
  • bash 自动完成:添加可能完成的描述

    是否可以使 bash 自动完成功能看起来像 Cisco IOS shell 中一样 我的意思是为每个完成添加简短的描述 如下所示 telnet 10 10 10 TAB Pressed 10 10 10 10 routerA 10 10 1
  • 命令运行时从 shell_exec 命令获取输出

    我正在编写一个 PHP 脚本网页 该网页旨在接受先前上传到服务器的 JFFS2 图像的文件名 然后 该脚本将使用映像重新刷新服务器上的分区 并输出结果 我一直在用这个 tmp shell exec update flash v filena
  • touch命令在一个目录下创建多个文件(不同名称)

    我想制作一个在 bash 中创建目录和文件结构的脚本 我尝试过这样的事情 mkdir p 1 2 touch 1 2 a b c a b c 应该是在一个命令或其他命令中创建的文件 但由于某种原因 结构是这样的 current folder

随机推荐

  • .htaccess 用于 SEO 机器人在没有 hashbang 的情况下抓取单页应用程序

    Using a pushState启用页面 通常您使用重定向 SEO 机器人escaped fragment习俗 您可以阅读更多相关内容here 该约定假设您将使用 hashbang 前缀位于单页应用程序上所有 URI 之前 SEO 机器人
  • 按 R 中的因素过滤数据框

    我有以下数据框 sp lt combn c sp1 sp2 sp3 sp4 2 d lt data frame t sp freq sample 0 100 6 和两个因素 x1 lt as factor c sp1 sp2 x2 lt a
  • 如何在 C# 中创建包含多种尺寸/图像的图标文件

    如何创建包含多种尺寸的图标文件 我知道我使用位图创建了一个图标Icon FromHandle 但如何向该图标添加另一个图像 尺寸 Edit 我需要在我的应用程序中执行此操作 因此我无法执行外部应用程序来进行组合 我正在寻找一种将 png 文
  • CSS中按属性选择元素

    是否可以通过 HTML5 数据属性来选择 CSS 中的元素 例如 data role 如果你的意思是使用属性选择器 当然 为什么不呢 data role page Styles 有多种属性选择器可用于各种场景 我链接到的文档中均涵盖了这些选
  • 插入约 5000 行时,核心数据 sqlite-wal 文件变得巨大(>7GB)

    我正在将数据导入 Core Data 并发现保存操作很慢 使用 iOS 模拟器 我观察 sqlite wal 文件不断增长 直到其大小超过 7GB 我正在导入大约 5000 条记录 其中包含大约 10 个字段 这并不是很多数据 我插入的每个
  • 合并不重叠的数组块

    我使用此函数将 512x512 二维数组划分为 2x2 块 skimage util view as blocks arr in block shape array 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  • BOOST_CHECK 无法编译自定义类型的运算符 <<

    我写了这个非常简单的类 以便清楚我的问题是什么 class A public int x A int y x y bool operator const A other const return x other x 现在 如果我定义 A f
  • 格式正确的乘法口诀表

    我如何制作一个组织成整齐表格的乘法表 我当前的代码是 n int input Please enter a positive integer between 1 and 15 for row in range 1 n 1 for col i
  • C++ 中的结构体可以有构造函数吗?

    Can a structC 中有构造函数吗 我一直在尝试解决这个问题 但我没有得到语法 在 C 中 a 之间的唯一区别class and a struct问题在于 成员和基类在类中默认是私有的 而在结构中默认是公共的 因此结构可以有构造函数
  • Maven cobertura 插件 - 多模块项目的一份报告

    我正在使用 Maven cobertura 插件来报告我的多模块项目中的代码覆盖率 问题是我不知道如何为项目中的所有模块生成一份报告 到目前为止 我已经为每个模块生成了单独的报告 但如果能为整个项目提供一份报告那就太好了 我的父pom配置
  • 将 Coldfusion 加密代码转换为 C#

    我有一个 Coldfusion 页面 其中包含一段加密变量的代码 如下所示
  • 如何在不按键的情况下更改大写锁定状态

    我正在使用一个Python程序 按下大写锁定键时会激活 我希望能够在程序处于活动状态时打开 关闭大写锁定状态 我尝试使用 virtkey 发送密钥 但它显然不起作用 因为密钥只是激活应用程序并且不会更改大写锁定状态 那么使用 python
  • Fluent nHibernate 启动时间慢

    我正在使用 Fluent NHibernate 我喜欢它 我遇到一个小问题 启动时间约为 10 秒 我不知道如何优化 Fluent nHibernate 为了减少启动时间的问题 我将其放在一个线程上 有人可以告诉这个问题的解决方案吗 并回复
  • 定义跨平台的money_format函数(Linux和Windows)

    我读到 money format 在 Windows 和某些 Linux 发行版 即 BSD 4 11 变体 上不可用 但我想使用普通函数 当可用时 编写跨平台库并使用它解决方法如果没有 那么我的库将能够在每个基于 PHP 的 Web 服务
  • YAML - 类型错误:无法转储匿名模块

    在 application controller 的操作中 如果我们尝试 p request env to yaml 我会得到这个错误 TypeError can t dump anonymous module
  • com.sun.faces.renderkit.html_basic.MenuRenderer createCollection:无法为 java.util.Arrays$ArrayList 类型创建新的 Collection 实例

    我正在尝试将 JSF SelectManyCheckBox 标记与枚举一起使用 这是我的 xhtml 代码
  • 检查 Visual Basic 文本框中输入的数值

    我正在为我的 Visual Basic 课程编写一个程序 并且有一个简单的问题 我们被鼓励做的一件事是检查以确保文本框中输入的数量实际上是数字 我们的教授建议使用 IsNumeric 来执行此检查 但我遇到了一些麻烦 在他将其添加到说明中之
  • wicked_pdf:页脚高度/样式

    我正在使用很棒的wicked pdf 宝石生成 PDF 但我不知道如何更改页脚中的某些样式 我的页脚有一个 HAML 模板 大致如下所示 html head meta charset gt utf 8 wicked pdf styleshe
  • Jackson 使用匿名类进行反序列化

    我一整天都在寻找可以回答这个问题的东西 但到目前为止我还没有太多运气 我的问题很简单 如何使用 Jackson 正确反序列化匿名对象 private interface Interface1 int getValue public stat
  • 如何传递包含引号/空格的脚本参数?

    我正在尝试写一个脚本notify finish可以添加到任何命令的前面 完成后 它将运行以下参数给出的命令 然后在命令完成后向用户发送电子邮件 这是我所拥有的 PROG 1 Run command given by arguments EC