卷曲 -F 换行符未正确解释

2024-01-09

我正在尝试在 bash 脚本中使用curl 通过 Pushover 发送通知。 我不明白curl -F不过要正确解释换行符。

curl -s \
-F "token=TOKEN" \
-F "user=USER" \
-F "message=Root Shell Access on HOST \n `date` \n `who` " \
https://api.pushover.net/1/messages.json > NUL

我试过了:

\n 
\\\n 
%A0

我宁愿直接推送消息,而不是通过文件。


curl不解释反斜杠转义,因此您必须在参数中插入实际的换行符curl看到了。换句话说,你必须获得外壳(bash在这种情况下)来解释\n,或者您需要插入一个真正的换行符。

Posix 标准 shell 不会像这样解释 C 转义符\n,虽然标准实用程序命令printf做。然而,bash确实提供了一种方法:在报价单中$'...'C 风格的反斜杠转义将被解释。否则,$'...'行为就像'...',这样就不会发生参数和命令替换。

然而,任何外壳——包括bash-- 允许换行符出现在引号内,并且换行符只是按原样传递。所以你可以写:

curl -s \
     -F "token=$TOKEN" \
     -F "user=$USER" \
     -F "message=Root Shell Access on $HOST
$(date)
$(who)
" \
     https://api.pushover.net/1/messages.json > /dev/null

(注意:我插入了参数扩展,看起来它们在原始版本中丢失了curl命令并将已弃用的反引号命令替换更改为推荐的$(...) form.)

如上所述,包含文字换行符的唯一问题是,如果您关心外观,它会扰乱缩进。所以你可能更喜欢 bash$'...' form:

curl -s \
     -F "token=$TOKEN" \
     -F "user=$USER" \
     -F "message=Root Shell Access on $HOST"$'\n'"$(date)"$'\n'"$(who)" \
     https://api.pushover.net/1/messages.json > /dev/null

这也有点难以阅读,但它是完全合法的。 shell 允许单个参数(“word”)由任意数量的带引号或不带引号的段组成,只要段之间没有空格即可。但是您可以通过预定义变量来避免使用多引号语法,有些人认为这样更具可读性:

NL=$'\n'
curl -s \
     -F "token=$TOKEN" \
     -F "user=$USER" \
     -F "message=Root Shell Access on $HOST$NL$(date)$NL$(who)" \
     https://api.pushover.net/1/messages.json > /dev/null

最后,您可以使用标准实用程序printf,如果您更习惯这种风格:

curl -s \
     -F "token=$TOKEN" \
     -F "user=$USER" \
     -F "$(printf "message=Root Shell Access on %s\n%s\n%s\n" \
                  "$HOST" "$(date)" "$(who)")" \
     https://api.pushover.net/1/messages.json > /dev/null
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

卷曲 -F 换行符未正确解释 的相关文章

随机推荐

  • 将数量输入字段更改为 WooCommerce 中的下拉菜单

    我在 function php 中使用以下内容 它在单个产品页面上效果很好 我遇到的问题是在购物车页面上 当您选择不同的数量时 它不会自动更新购物车 有任何想法吗 function woocommerce quantity input ar
  • PHP - 序列化具有静态属性的类

    当用户登录我的网站时 我会创建一个实例User类 获取一些与用户相关的数据并将对象存储在SESSION 我从数据库获取的一些数据应该在整个会话期间保持不变 并且我希望可以从其他对象访问这些数据 我更喜欢使用User static value
  • 如何在AppDomain中执行非托管程序集?

    执行非托管程序集时出现以下错误 无法加载文件或程序集 文件 C 程序 文件 Maxima 5 21 1 lib maxima 5 21 1 binary gcl maxima exe 或其依赖项之一 这 模块预计包含一个 装配清单 我应该怎
  • Tailwind CSS + VueJS 单文件组件与 VS Code 集成

    如何正确配置 Tailwind CSS 和 VS Code 以至少禁用 VueJS 单文件组件 vue cli 内有关 at rule 和空标记错误的错误
  • 用 C++ 编写操作系统[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Python/Pandas:如何从 datetime64[ns] 转换为 datetime

    我有一个处理 Excel 文件的脚本 发送它的部门有一个生成它的系统 我的脚本停止工作 我突然收到错误Can only use str accessor with string values which use np object dtyp
  • atexit() 函数

    有几个教程解释了如何使用atexit 函数如 http linux die net man 3 atexit http linux die net man 3 atexit 示例在 main 函数中给出 很容易理解 但是 我正在我的程序中创
  • 在 Windows 中使用 .Net 手动加载和卸载驱动程序

    我有一个通过 COM USB 转换器使用 USB 端口连接到计算机的设备 并且我使用 FTDI 驱动程序来模拟该 USB 上的虚拟 COM 端口 我的转换器有时会冻结 Windows 驱动程序也是如此 我无法打开 关闭 COM 软件无法通过
  • 获取单选按钮值 [INNO SETUP]

    我正在尝试在 Inno Setup 中创建一个新窗口 在此窗口中 应该有 5 个单选按钮 用户必须仅选择此选项之一 当用户单击下一个按钮时 我必须获取并保存单选按钮的值 在某处 并将该值传递给带有参数的批处理文件 将运行 我认为我应该在 N
  • ASP.NET 中的 Excel 读取:如果列具有不同的数据格式,则不会读取数据

    我有一个 asp net C 应用程序 我正在其中使用 OLEDBConnection 读取电子表格的内容 我正在使用下面的代码行从 Excel 电子表格中读取数据 OleDbConnection con new OleDbConnecti
  • 在负载平衡情况下使用 WCF 4.5 RemoteEndpointMessageProperty 获取客户端 IP 地址

    我在 IIS 中托管了 WCF 4 5 Restful 服务 我正在尝试使用 RemoteEndpointMessageProperty 获取客户端的 IP 地址 消耗该服务 Code 1 private string GetClientI
  • 为什么人们不使用四面体作为天空盒?

    在3D游戏中渲染固定纹理的天空时 人们通常会先在立方体贴图中创建6个纹理 然后在相机周围渲染一个立方体 在 GLSL 中 您可以使用法线而不是纹理坐标来访问纹理中的像素 并且可以通过标准化相对于相机的片段位置轻松获得该法线 然而 这个过程可
  • 将多字节字符映射到其 unicode 点表示

    如何在 C 中将单个 UTF 8 字符映射到其 unicode 点 例如 将被映射到00c8 如果您的平台wchar t存储unicode 如果它是32位类型 它可能会 并且你有一个UTF 8语言环境 你可以调用mbrtowc 来自 C90
  • 根据每个文件之间的空行将文本文件的段落拆分为多个文件

    以前我问过同样的问题 但没有成功 可能是我在上一个问题中不清楚 这是我希望根据每个摘要之间的空行将其拆分为 3 个文件的文件 并以摘要编号作为文件名 16914261 Energetic basis of molecular recogni
  • 删除分段线(OpenCV、Python)

    给出以下代码 import numpy as np import cv2 gray cv2 imread image png edges cv2 Canny gray 50 150 apertureSize 3 cv2 imwrite ed
  • 读-复制-更新和读-写-锁之间的区别?

    从编程的角度来看 它们在我看来几乎相同 根据我在更新数据时读到的内容 RCU 需要维护旧副本 直到所有读取器都完成 这会产生很大的开销 这是实施方面的唯一区别吗 读 复制 更新 RCU 与读写锁不同 以下是我能想到的一些要点 将更新和回收信
  • 在 JAVA 中将 java.util.Date 转换为不同格式的 java.util.Date [重复]

    这个问题在这里已经有答案了 我得到的日期为 java util Date not String java util Date Mon Jul 13 00 00 00 IST 2020 我想将其转换为 2020 07 13T00 00 格式
  • GLFW三角形不会变色

    我一直在关注有关如何使用 glfw 制作基本图形的 YouTube 简短教程 我无法让我的三角形改变颜色帮助我 主要代码 include
  • 使用 App Inventor 进行 XML-RPC HTTP 请求?

    我正在尝试构建一个与 Tapatalks API 通信的应用程序 它使用 XML RPC HTTP 请求 我可以使用 Web 组件执行 post get 请求 我找不到任何有关修改 Web 组件 块来创建所述 XML RPC 编码的信息 有
  • 卷曲 -F 换行符未正确解释

    我正在尝试在 bash 脚本中使用curl 通过 Pushover 发送通知 我不明白curl F不过要正确解释换行符 curl s F token TOKEN F user USER F message Root Shell Access