保留源 shell 脚本而不退出终端

2024-01-10

我正在编写一个 shell 脚本来保存一些击键并避免拼写错误。我想将脚本保留为单个文件,该文件调用内部方法/函数并在出现问题时终止函数without离开航站楼。

my_script.sh

#!/bin/bash
exit_if_no_git() {
  # if no git directory found, exit
  # ...
  exit 1
}

branch() {
  exit_if_no_git
  # some code...
}

push() {
  exit_if_no_git
  # some code...
}

feature() {
  exit_if_no_git
  # some code...
}

bug() {
  exit_if_no_git
  # some code...
}

我想通过以下方式调用它:

$ branch
$ feature
$ bug
$ ...

我知道我可以source git_extensions.sh in my .bash_profile,但是当我执行其中一个命令时,没有.git目录,它将exit 1正如预期的那样,但这也会从终端本身退出(因为它是来源的)。

有没有替代方案exiting 的功能,这也会退出终端?


而不是定义一个函数exit_if_no_git,将 1 定义为has_git_dir:

has_git_dir() {
  local dir=${1:-$PWD}             # allow optional argument
  while [[ $dir = */* ]]; do       # while not at root...
    [[ -d $dir/.git ]] && return 0 # ...if a .git exists, return success
    dir=${dir%/*}                  # ...otherwise trim the last element
  done
  return 1                         # if nothing was found, return failure
}

...以及其他地方:

branch() {
  has_git_dir || return
  # ...actual logic here...
}

这样函数就会短路,但不会发生 shell 级退出。


也可以退出正在运行的文件sourced using return,防止其中的后续函数被定义,如果return在此类文件的顶层运行。

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

保留源 shell 脚本而不退出终端 的相关文章

  • 通过特定分隔符删除字符串

    我的文件中有几列 其中第二列有 分隔符 我想删除第二列中的第一个 第三个和第四个字符串 并将第二个字符串留在该列中 但我有正常的分隔符空间 所以我不知道 input 22 16050075 A G 16050075 A G 22 16050
  • 从 bash 从新的 Google Chrome 浏览器会话获取“用户代理”字符串

    我想要得到用户代理 HTTP 请求标头 https developer mozilla org en US docs Web HTTP Headers User Agent来自 bash 的新 Google Chrome 浏览器会话 刚刚打
  • .profile 无法从 Mac 终端运行

    我有一个 profile 文件 我正在终端中读取并使用别名 但在某些时候 别名由于没有明确的原因而停止工作 其他命令仍在工作 为了快速修复 我删除了 rm 并在用户目录中重新创建了 profile 文件 我可以看到 至少在该目录中没有 ba
  • bash 中 :-(冒号破折号)的用法

    bash中这种风格的含义是什么 PUBLIC INTERFACE eth0 目的是什么 If PUBLIC INTERFACE存在且不为null 则返回其值 否则返回 eth0 实际上有一些记录在bash 手册页 http linux di
  • 如何制作一个 bash 脚本来同时创建 40 个程序实例?

    我是新来的bash and Linux 我编写了一个程序 我想创建多个同时实例 现在 我通过打开 10 个新终端 然后运行该程序 10 次 我运行的命令是php home calculatedata php 使用 bash 脚本执行此操作的
  • 我可以从命令行打印 html 文件(带有图像、css)吗?

    我想从脚本中打印带有图像的样式化 html 页面 谁能建议一个开源解决方案 我使用的是 Linux Ubuntu 8 04 但也对其他操作系统的解决方案感兴趣 你可以给html2ps http user it uu se jan html2
  • if [ -z "${FILE_LIST}" ] 中的 -z 是什么

    遇到了这个 什么是 z在 shell 脚本中if z FILE LIST 是相同的test And man test gives z STRING the length of STRING is zero 注意 在某些平台上 是一个符号链接
  • 如何判断 Bash 中是否存在文件?

    这会检查文件是否存在 bin bash FILE 1 if f FILE then echo File FILE exists else echo File FILE does not exist fi 我如何只检查文件是否存在not ex
  • 对目录中的所有文件执行命令

    有人可以提供执行以下操作的代码 假设有一个文件目录 所有这些文件都需要通过程序运行 该程序将结果输出到标准输出 我需要一个脚本 该脚本将进入一个目录 对每个文件执行命令 并将输出连接到一个大输出文件中 例如 要在 1 个文件上运行命令 cm
  • OSX bash 最小化窗口

    在 Mac 中并使用 bash shell 我想执行一个包含单个命令 启动 Jupyter Lab 的文件并立即最小化终端窗口 有没有办法在不安装第三方软件的情况下做到这一点 是的 只需使用osascript https ss64 com
  • Git difftool 未启动外部 DiffMerge 程序

    我一直遵循 戴夫的博客条目 http www davesquared net 2009 05 setting up git difftool on windows html 链接在此answer https stackoverflow co
  • 正则表达式,如果模式在引号中则忽略模式

    编写一个非常简单的脚本解析器作为学校项目的一部分 虽然这不是必需的 但我很好奇是否可以仅使用正则表达式来完成 语法类似于 ASP 其中脚本以 结尾 它只支持一个命令 pr 与echo或Response Write相同 现在我正在使用这个正则
  • 在 iOS 模拟器中安装应用程序的脚本

    我正在尝试自动化构建应用程序 运行单元测试以及最终运行 UI 测试的过程 我正在通过命令行 xcodebuild sdk iphonesimulator6 0 在某个目录中构建应用程序 如何通过命令行 在 Library Applicati
  • 如何在shell中输出返回码?

    我正在尝试通过调用自定义 shell 脚本sh bin sh c myscript sh gt log txt 2 gt 1 echo 该命令的输出是创建的后台进程的 PID 我想指导 bin sh保存返回码myscript sh到某个文件
  • 如何查看正在运行的 tcsh 版本?

    如何查看我的 UNIX 终端中运行的 tcsh 的当前版本 看着那 这version多变的 echo version tcsh 6 14 00 Astron 2005 03 25 i386 intel linux options wide
  • 使用 awk 读取文件并搜索另一个文件

    我正在读取一个文件 每行都有数字 我需要搜索另一个满足这些数字和其他条件的文件 我正在尝试使用 awk 来做到这一点 但遇到了问题 File a txt 1476 1477 1497 现在我需要打印第 12 列包含这些数字的行以及第 3 列
  • 从 UNIX 命令行向串行端口发送字节?

    我想使用命令行将字节流发送到串行端口 这可能吗 我的串口位于 dev cu usbserial A700dYoR在我的 Mac 上 例如 如果我想将整数 50 或字符串 data 发送到该串行端口 我该怎么做 我对 UNIX 的了解非常有限
  • 协助 awk/bash 捕获内存差异

    我正在尝试从以下文件中提取以下输出 xr lab show clock Thu Sep 19 14 38 02 812 WIB 14 38 02 893 WIB Thu Sep 19 2019 xr lab xr lab xr lab sh
  • 如何从我自己的脚本向 Fish shell 提供制表符补全?

    我运行的是 Ubuntu 13 10 和 Fish 2 1 0 我想自己编写一个 Python 脚本来从命令行执行一些任务 该脚本将需要命令行参数 我怎样才能编写我的脚本 以便 Fish 可以请求并获取给定参数的可能值 潜在值列表是动态的
  • shell-out 值到 md5(加密)函数

    我正在寻找一种解决方案 我正在构建 JSON 记录 并需要在 JQ 中生成一些文本 但将此文本通过管道传输到 MD5 求和函数并将其用作键的值 echo first John last Big jq id first last md5 通过

随机推荐

  • 在使用 libgdx 中的 scene2d 按钮时需要帮助

    我是 libGDX 的新手 我正在尝试通过扩展 com badlogic gdx scenes scene2d ui Button 来创建自定义按钮 我想要这个类中所有与按钮相关的逻辑 但我不知道如何使点击起作用 我阅读了许多有关添加事件侦
  • 使用 fetchone()[0] 时出现“TypeError:‘NoneType’对象不可订阅”

    我有一个问题fetchone 函数在sqlite3库对象connect 我执行的查询可能并不总是返回值 检查是否有返回值 如果它返回一个值 我使用该值将该值赋给我的变量fetchone 0 执行的代码 conn sqlite3 connec
  • SceneKit 中的自定义顶点属性

    我正在使用 SceneKit 生成一些自定义几何体 这工作正常 但我正在努力寻找一种包含自定义顶点属性的方法 具体来说 我希望每个顶点包含一个额外的 SCNVector3 我发现了很多使用 ShaderModifiers 来包含依赖于自定义
  • android:将按钮添加到应用程序的标题中?

    是否可以在应用程序标题的右上角添加一个按钮 例如 在 Feed 我的 feed 的标题中添加 刷新 按钮 http www android com market apps feedr lg 01 jpg http www android c
  • iOS 中的相机和照片库一起

    我正在创建一个应用程序 我需要在同一个屏幕上同时显示相机和照片库 屏幕的上半部分将有相机 屏幕的下半部分将有照片库 请参阅屏幕截图 另请告诉我这是否可行 如果可能 请帮助我如何做到这一点 谢谢 你尝试过Instagram http www
  • ACRA 异常 只能使用低 16 位作为 requestCode

    我的应用程序使用 ACRA 进行错误报告 并且我的设备收到了一些错误报告 Can only use lower 16 bits for requestCode Google 显示使用 startActivityForResult 时发生此错
  • 如何从 Python 中的函数返回两个值?

    我想从两个单独的变量中的函数返回两个值 例如 def select choice loop 1 row 0 while loop 1 print Choose from the following options 1 Row 1 2 Row
  • NHibernate 警告并且数据未保存

    当我通过调用 SaveOrUpdate 进行保存时 收到此警告 并且在调用 Transaction Commit 后数据未保存在数据库中 NHibernate Engine ForeignKeys 无法 确定 项目名称 是否与 分配的标识符
  • Spark DataFrame 重新分区和 Parquet 分区

    我在列上使用重新分区来将数据存储在镶木地板中 但 我看到没有 parquet 分区文件的数量与 不 Rdd 分区 rdd分区之间是否没有相关性 和镶木地板隔断 当我将数据写入镶木地板分区并使用 Rdd 时 重新分区 然后我从 parquet
  • 带有 C# 内部访问修饰符的 Doxygen

    我正在使用 Doxygen 为我正在处理的 C 项目生成一些 API 文档 我在这个项目中有相当多的 内部 功能 并且不希望 Doxygen 在它生成的生成的 html 中生成这些签名 我已尝试启用 HIDE FRIEND COMPOUND
  • macOS 中的 UIGraphicsBeginImageContextWithOptions 模拟

    以下是我用来在 iOS 中缩放图像的代码 即将 500x500 图像缩放到 100x100 图像 然后存储缩放后的副本 UIImage image UIImage originalImage scaledToSize CGSize desi
  • NaN 作为字典中的键

    谁能向我解释以下行为 gt gt gt import numpy as np gt gt gt np nan 5 np nan 5 gt gt gt float64 np nan 5 float64 np nan KeyError nan
  • 切换到共享运行时后 Office 插件加载失败

    我跟着配置您的 Office 加载项以使用共享 JavaScript 运行时 https learn microsoft com en us office dev add ins develop configure your add in
  • 如何使用searchkick根据某些条件进行索引

    我正在使用searchkick 和rails4 我有一个活动记录 People 其属性为 a b c 如何仅当 b 等于 type1 时才建立索引 否则不建立索引 目前我所知道的是 def search data a a b b c c e
  • java等待光标显示问题

    我在应用程序中显示等待光标时遇到问题 只要鼠标位于定义其自身光标的面板上方 等待光标就不会出现 如果面板不改变光标 则会出现等待光标 我附上 SSCE 来准确解释我的问题 public class BusyCursorTest extend
  • VS 2017 中的 MySQL 和 MVC 实体框架无法正常工作

    我正在尝试启动 MVC EF Visual Studio 2017 项目 我在本地实例上使用 MySQL 设置了数据连接 但是当我创建 ADO net 数据模型时 出现图中所示的错误 这里还有另一篇文章 无法对实体框架 6 使用 MySQL
  • 对数据库的访问进行队列以避免多个缓存项

    我有一个与音乐相关的 ASP NET 网站 它在第一次请求时缓存数据库中的大量静态信息 有时 应用程序负载较重时会重置应用程序并清除缓存 然后所有 http 请求都会转到数据库以检索静态数据并将其缓存以供其他请求使用 如何确保只有一个请求进
  • 表达式树生成的 IL 是否经过优化?

    好吧 这只是好奇心 对现实世界没有帮助 我知道使用表达式树 您可以像常规 C 编译器一样即时生成 MSIL 由于编译器可以决定优化 我很想问在执行期间生成的 IL 的情况如何Expression Compile 基本上有两个问题 因为在编译
  • ResizeObserver 一 vs 多性能

    The 调整大小观察者 https wicg github io ResizeObserver has an 观察 https wicg github io ResizeObserver dom resizeobserver observe
  • 保留源 shell 脚本而不退出终端

    我正在编写一个 shell 脚本来保存一些击键并避免拼写错误 我想将脚本保留为单个文件 该文件调用内部方法 函数并在出现问题时终止函数without离开航站楼 my script sh bin bash exit if no git if