使用 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 命令拆分为多行? 的相关文章

随机推荐

  • 将过滤器应用于 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