使用 IF 语句时如何将 shell 命令拆分为多行?

2024-04-12

当命令是 shell 的一部分时,如何将命令拆分为多行if陈述?

这有效:

if ! fab --fabfile=.deploy/fabfile.py --forward-agent --disable-known-hosts deploy:$target; then rc=1                                                                       
fi

这不起作用:

# does not work:
if ! fab --fabfile=.deploy/fabfile.py \ 
  --forward-agent \
  --disable-known-hosts deploy:$target; then   
  rc=1
fi

我得到的不是整个命令的执行,而是:

./script.sh: line 73: --forward-agent: command not found

更重要的是,我对 Bash 的理解中缺少什么可以帮助我理解这个问题以及未来类似的问题?


如果反斜杠之后和换行符之前有空格(空格或制表符),则续行将会失败。由于没有这样的空格,您的示例对我来说效果很好:

$ cat test.sh
if ! fab --fabfile=.deploy/fabfile.py \
   --forward-agent \
   --disable-known-hosts deploy:$target; then
     echo failed
else
     echo succeeded
fi

$ alias fab=true; . ./test.sh
succeeded
$ alias fab=false; . ./test.sh
failed

注释中提出了一些细节:shell 中的续行反斜杠并不是真正的特殊情况;这只是一般规则的一个例子,即反斜杠“引用”紧随其后的字符,从而防止它通常受到的任何特殊处理。在这种情况下,下一个字符是换行符,并且被阻止的特殊处理是终止命令。通常,带引号的字符最终会按字面意思包含在命令中;相反,反斜杠换行符将被完全删除。但除此之外,机制是相同的。最重要的是,反斜杠仅引用紧随其后的字符;如果该字符是空格或制表符,则您只会得到文字空格或制表符;反斜杠对后续换行没有影响。

正如捷克学所指出的那样, 或回车符。 POSIX shell 无法处理 Windows 格式的文本文件,即使在 WSL 中也是如此。或者 Cygwin,但至少他们的 Bash 端口添加了一个igncr您可以选择set -o使其能够容回车。

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

使用 IF 语句时如何将 shell 命令拆分为多行? 的相关文章

  • 您可以将操作直接应用于map/reduce/filter 中的参数吗?

    map and filter通常可以与列表理解互换 但是reduce并不那么容易被交换map and filter 此外 在某些情况下我仍然更喜欢函数语法 但是 当您需要对参数本身进行操作时 我发现自己正在经历语法体操 最终必须编写整个函数
  • C 函数声明中的无类型参数

    最近我一直在查看 Steven Skiena 的在线资源中的一些 C 示例代码 算法设计手册 http www cs sunysb edu skiena algorist book programs 并且对他的一些函数调用的语法感到困惑 诚
  • 零件和跨度:有什么理由这“不应该”起作用吗?

    这是一个设计问题 而不是现有功能的问题 我想使用 1 2 3 4 5 1 3 2 5 我预计 1 2 3 2 3 4 5 但它是无效的 During evaluation of In 1 Part pspec Part specificat
  • to_proc 方法在 Ruby 中意味着什么?

    我正在学习 Rails 并关注这个线程 https stackoverflow com questions 1961030 我被困住了to proc方法 我认为符号只是字符串的替代品 它们就像字符串 但在内存方面更便宜 如果我还缺少任何其他
  • 为什么是 ”& ;”无效的语法?

    我正在尝试在终端上运行 for 循环 我希望将每次迭代发送到后台进程 以便所有迭代同时运行 以下是命令一一运行 for i in sra do fastq dump split files i done only 我突出显示了分号 要同时运
  • 带数组的双美元变量

    我正在尝试使用双美元语法访问数组的第一项 但它无法按照我想要的方式工作
  • 为什么没有参数标识符的函数在 C++ 中有效?

    给定一个 C 函数 其参数仅为类型且没有标识符 void foo1 int int int cout lt lt called foo1 我可以这样称呼它 int main foo1 10 10 10 为什么这是 C 中的有效构造 这只是
  • jquery 隐藏简单的 javascript 错误

    我在 chrome 和 firefox 中使用 jQuery 和 flot 当我编写代码时 我发现执行在一些愚蠢的事情上会默默失败 例如访问不存在的哈希结构等 感觉 jQuery 中有一些 try catch 逻辑 让我看不到任何错误 有没
  • 判断字符串是否包含有效的javascript代码

    我正在寻找一个C 返回的函数true如果字符串包含有效的 JavaScript 语法 例如 IsValidJavascript alert hello 会回来true but IsValidJavascript alertXXhelloZ
  • 如何隐藏显示终端命令输出

    当我运行这个命令时 sudo htpasswd b home reynolds htpasswd admin admin 我正在得到输出Updating password for user admin在终端中 但我不想显示该输出 所以我在谷
  • Objective C“#if”语法

    我对 如果 或 如果 有点困惑 if当我查看一些类时我看到的语法 例如 if someConstant someNumber do something elif etc versus if someConstant someNumber d
  • 类中的易失性变量:“‘易失性’之前预期有非限定 ID”?

    我有两个static volatile我的类中定义的变量ADC 该类写为 裁剪以节省空间 pragma once include PeriodicProcess PeriodicProcess h include
  • 快速向量初始化 C++ [重复]

    这个问题在这里已经有答案了 可能的重复 C 使用硬编码元素初始化 STL 向量的最简单方法 https stackoverflow com questions 2236197 c easiest way to initialize an s
  • “设置:非法选项 -”在一台主机上,但在另一台主机上则不然

    我在我的一台 ubuntu 虚拟机中编写了一个 sh 脚本 该脚本工作正常 但是当我尝试在其他虚拟机中运行它时 它不起作用 两个虚拟机应该相同 和bash version两个虚拟机均回复 GNU bash version 4 3 11 1
  • 如何在 Vim 中仅在某些上下文中启用语法隐藏?

    我想隐藏名称基于希腊符号的变量 并将它们转换为 Unicode 等效符号 类似于vim 可爱的 python https github com ehamberg vim cute python作品 例如 我有这个 syntax match
  • SQL 条件行插入

    如果满足条件是否可以插入新行 例如 我有这个表 没有主键也没有唯一性 image id tag id 39 8 8 39 5 11 如果 image id 和 tag id 的组合不存在 我想插入一行 例如 INSERT WHERE ima
  • 使用 SIGINT 默认处理程序时从 system() 返回值

    我遇到了一些奇怪的返回值system 当子进程从终端接收到 SIGINT 时 解释一下 从 Perl 脚本parent pl I used system 运行另一个 Perl 脚本作为子进程 但我还需要通过 shell 运行子进程 所以我使
  • C#中global::关键字的用法是什么?

    有什么用global C 中的关键字 什么时候我们必须使用这个关键字 从技术上来说 global不是关键字 它是所谓的 上下文关键字 它们仅在有限的程序上下文中具有特殊含义 并且可以在该上下文之外用作标识符 global每当有歧义或成员被隐
  • 什么是上下文无关语法和巴科斯诺尔范式?

    有人可以用通俗的语言解释一下吗 什么是上下文无关语法 什么是巴科斯诺尔范式 如何使用这个记号 如何进行字符串推导 如何描述语言语法 上下文无关语法 CFG G 是一个四元组 V R S 其中 V 一组非终结符号 一组端子 V R 一组规则
  • 返回“!”是什么意思?铁锈中的意思是什么?

    最近我在 Rust 中发现了一个返回的函数 而不是基本类型 如下所示 fn my function gt 这是什么意思 我无法在中找到有关此的信息锈迹斑斑的书 https doc rust lang org book 该函数使用此类指标返回

随机推荐

  • 将过滤器应用于 AS3 中的所有内容

    我正在尝试在 AS3 Flex SDK 中添加过滤器 我可以为任何一个对象添加一个过滤器 但我想将过滤器应用到一切那是某个对象的子对象 假设弹出一个暂停窗口 暂停窗口下方的所有内容都会变得模糊 将过滤器应用于每个单独的对象 例如 迭代列表
  • 如何更改 GTK 中的字体大小?

    有没有一种简单的方法可以更改 GTK 中文本元素的字体大小 现在我能做的就是set markup在标签上 写着一些愚蠢的东西 比如 lbl set markup span s span text 这 1 需要我设置字体 2 似乎有很多开销
  • wpf - 如何控制用户控件鼠标悬停的可见性?

    我有一个用户控件 我想禁用 UserControl 中控件的可见性 我只希望当用户的光标悬停在用户控件的主要部分 即 橙色 矩形部分 上时它可见 红色圆圈是控件的一部分 仅在 悬停 时可见 主窗口 xaml
  • 如何在没有文本框的情况下在 Selenium 中上传文件

    我一直在寻找在 Selenium 2 中上传文件的解决方案 问题是我尝试上传的网络元素可以通过两种方式使用 拖放或单击按钮 没有字段输入框 并不是说我没有尝试过使用 sendKeys 我已经在按钮和所有周围的元素上尝试过 这个问题的第二部分
  • DocFx:如何在网站上创建目录导航?

    我想创建一个目录 看起来像什么DocFx 在他们的官方网站上有 http dotnet github io docfx tutorial docfx exe user manual html 使用默认值docfx init使用所有默认值的命
  • Python wilcoxon:不等N

    Rs wilcox test可以采用不同长度的向量 但 wilcoxon 来自scipy stats不能 我得到一个unequal N错误信息 from scipy stats import wilcoxon wilcoxon range
  • 从 GPS 坐标获取城市名称

    我想从 GPS 坐标获取城市的名称 我可以使用 Google API 获取 GPS 点的详细信息 http maps googleapis com maps api geocode output parameters 输出是 XML 但我不
  • 如何导出带有产品完整 url 的产品 csv

    我想导出包含完整产品 url 的产品 CSV 即包括基本 url 我不想手动执行此操作 是否可以自定义代码 以便产品导出具有完整的 url
  • 如何读取在 gradle 执行中较早更新的属性文件中的最新属性

    对于我的 Android 项目 我配置了 defaultConfig 以便它从 gradle properties 中的版本属性获取生成的 apk 中 AndroidManifest xml 的 versionName 这很好用 这是 bu
  • 谷歌图片搜索是如何实现的?

    我只需拖放谷歌中的任何图像即可获得结果 它是如何实施的 该算法背后的想法是什么 该图像数据是否转换为任何内容以供搜索或 不知道 令人惊讶的是 我们还可以使用Google来回答这个问题 Google 按图像搜索使用的算法是什么 http ww
  • 在 ghci 中跟踪历史

    历史管理在 GHCI 或其他基于 Haskell 的 REPL 中如何工作 由于 Haskell 是一种纯语言 我猜它是使用 monad 实现的 也许是状态单子 http learnyouahaskell com for a few mon
  • 使用 apt-get install nginx 后重新编译 nginx

    我最初是通过 apt get install 安装 nginx 的 它工作得很好 现在 我想安装一些第 3 方模块 并且必须重新编译 nginx 所以我尝试重新编译 它只是走过场 然后我意识到我的原始版本仍然是正在使用的版本 我是否需要先卸
  • Python ImportError:无法在 virtualenv 中导入名称“_imagingtk”

    我想开始使用枕头 但遇到了一些问题 起初 我以为我可以简单地pip install pillow 所以我激活了我的 virtualenv 并做到了这一点 当它不起作用时 我意识到我需要为枕头安装一些依赖项 安装 http pillow re
  • R - 在城市地图上安装网格并将数据输入到网格方块中

    我试图在圣何塞上放置一个网格 如下所示 圣何塞网格 https i stack imgur com U8RxX png 您可以使用以下代码直观地制作网格 ca cities tigris places state CA using tigr
  • 使用 terraform 为现有虚拟机启用 Azure Monitor

    我正在尝试为现有虚拟机启用 azure 监视器功能 该功能使用 terraform 检查虚拟机的运行状况和性能 但我无法找到相应的文档 你能帮我做同样的事情吗 因为我想要对天蓝色进行详细的监控 要在现有虚拟机上启用 VMinsights 您
  • 我们如何将 JWT 令牌存储在 Http only cookie 中?

    我正在创建登录模块 用户将输入用户名和密码 如果用户验证成功 服务器将返回 JWT 令牌 我将使用 JWT 令牌来验证 React js 中的不同 API 调用 现在我担心的是 我发现了一些与此相关的文章 然后我发现我们可以使用仅 http
  • 从数据列(字符串)中提取字符前后的元素

    我想提取字符串中某些字符之前和之后的字符 其中大部分位于 pandas 数据帧列中 基本上我想从我的主要数据帧中获取并合并在一起是从我的 应变 和 区域 列中获取以下项目 i 原始菌株 链霉菌 sp QL40 O ii 原始地区 区域1 1
  • Python urllib2 响应头

    我正在尝试提取 URL 请求的响应标头 当我使用firebug分析URL请求的响应输出时 它返回 Content Type text html 但是当我使用 python 代码时 urllib2 urlopen URL info 结果输出返
  • Jax-RS 中可选的 @PathParam

    我有一项服务 其中路径的最后一部分是可选的 用户都可以输入 mypath and mypath param1 我尝试使用正则表达式来过滤路径的最后部分 Path mypath param1 param1 我使用 RestEasy 作为我的
  • 使用 IF 语句时如何将 shell 命令拆分为多行?

    当命令是 shell 的一部分时 如何将命令拆分为多行if陈述 这有效 if fab fabfile deploy fabfile py forward agent disable known hosts deploy target the