在 find + xargs grep 中得到退出代码 123

2023-11-21

这是我的脚本

eval "find \\( -type f -a \\( -name '*.h' \\) \\) -print0" | xargs -0 -n100 grep  -f <(echo "stdio")
echo $?

未找到任何内容,退出代码为 123。

如果我稍微修改一下如下

echo "stdio" >.P
eval "find \\( -type f -a \\( -name '*.h' \\) \\) -print0" | xargs -0 -n100 grep <.P
echo $?

发现了一些东西,但退出代码仍然是 123。

实际上我只是想写一个小脚本来使 find+xargs+grep 更容易。例如,

xgrep -e PATTERN1 -e PATTERN2 ... *.c *.h

是执行

find -name *.c -o -name *.h | xargs grep -f <(echo "$PATTEN1
$PATTERN2")

使用-f选项而不是-e是为了避免在模式中转义单引号或双引号时出现麻烦。

#!/bin/bash
#set -e -o pipefail

eval ARGV=($(getopt -l '' -o 'e:li' -- "$@")) || exit 1
for((i=0;i<${#ARGV[@]};i++)) {
    o="${ARGV[$i]}"
    case $o in
    -e)
        i=$((i+1));
        a="${ARGV[$i]}"
        if [ -n "$grep_patterns" ]; then
            grep_patterns="$grep_patterns"$'\n'
        fi
        grep_patterns="$grep_patterns$a"
        ;;
    -i)
        grep_options="$grep_options -i"
        ;;
    -l)
        grep_options="$grep_options -l"
        ;;
    --)
        i=$((i+1));
        break;;
    esac
}

for((;i<${#ARGV[@]};i++)) {
    if [ -n "$find_options" ]; then
        find_options="$find_options -o "
    fi
    find_options="${find_options}-name '${ARGV[$i]}'"
}

cmd="find \\( -type f -a \\( $find_options \\) \\) -print0"
eval "$cmd" | xargs -0 grep $grep_options -f <(echo "$grep_patterns")

123 表示“任何以非零状态退出的调用”。所以xargs ran grep至少两次(因为您向其提供了如此多的文件,以至于它们超出了最大命令行长度,您将其限制为 100 个文件),并且至少有一次调用是针对一组不包含匹配项的文件,这导致退出代码来自grep非零(失败)。

也许你应该解释一下你想要实现的目标。这eval看起来多余,双重重定向可能无法实现您想要的(grep的标准输入不能同时连接到管道eval and to .P).

如果您想将第一个参数参数化为grep,也许做类似的事情

#!/bin/sh
find -type f -name '*.h' -print0 |
xargs -0 -n100 grep "$1"

...你可以用例如调用它stdio作为第一个参数。

(另请注意,参数已大大简化find。你只有两个谓词,所以不需要括号任何东西,然后-a也可以删除。)

如果存在,退出代码仍为 123grep返回零匹配的调用。您可以通过省略来减少机会-n 100(无论如何,这似乎几乎没有任何有用的目的)但如果你想绝对阻止它,你可以将整个管道提供给| grep .如果有任何输出,它将报告成功。 (或者你可以运行xargs在包装器上,如果退出代码来自,则总是返回成功grep是 0 或 1,但这更复杂,即使在零匹配的情况下,您也会看到“成功”。)

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

在 find + xargs grep 中得到退出代码 123 的相关文章

  • bash 变量中的 Linux 鞭尾/对话框参数错误

    有人可以解释为什么下面的代码不起作用吗 我要疯狂地想找出答案 bin bash TEST M1 1 wire Interface ON echo TEST RESULT dialog title Config Modules State c
  • 在 Linux 中禁用历史记录 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 要在 Linux 环境中禁用历史记录 我执行了以下命令 export HISTFILESIZE 0 export HISTSIZE 0 u
  • 使用正确的头打印文件名

    我想获取当前目录中的文件名 使得文件的第一行等于myWord 我想结合find type f命令与 exec选项与head 1 filename但无济于事 有没有一些聪明的 单行的解决方案来解决这个问题 您可以使用find with awk
  • 在bash中,是否有相当于“错误消息”的东西

    在 perl 中 您可以使用错误消息退出die some msg bash 中是否有等效的单个命令 现在 我正在使用命令来实现这一点 echo some msg exit 1 你可以很容易地自己推出 die echo 1 gt 2 exit
  • 从 Amazon S3 存储桶下载文件的脚本

    尝试编写脚本以从 Amazon S3 存储桶下载文件 cURL 网站上的示例遇到问题 下面的脚本产生 我们计算的请求签名与您的签名不匹配 假如 检查您的密钥和签名方法 感谢任何帮助 bin sh file filename php buck
  • 语法错误:for 循环变量不正确

    我正在尝试编写一个可以在后台调高收音机音量的脚本 bin sh for i 80 i lt 101 i do amixer cset numid 1 i sleep 60 done 但我有问题 alarmclock vol sh 3 ala
  • 如何在递归调用函数时阻止 bash 创建子 shell

    这是一个计算阶乘的简单 shell 函数 bin bash function factorial if 1 lt 2 then echo 1 else echo 1 factorial 1 1 fi factorial 1 但我发现这个脚本
  • 通过特定分隔符删除字符串

    我的文件中有几列 其中第二列有 分隔符 我想删除第二列中的第一个 第三个和第四个字符串 并将第二个字符串留在该列中 但我有正常的分隔符空间 所以我不知道 input 22 16050075 A G 16050075 A G 22 16050
  • 如何在 Linux 中编写文本模式 GUI? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 当我编写脚本 程序时 我经常想弹出一个简单的文本 gui 来提示输入 我该怎么做 例如 来自 Shel
  • 将相对符号链接转换为绝对符号链接

    如何在 bash 中递归地将相对符号链接转换为绝对符号链接 ln sf readlink f link link
  • 迭代 bash 脚本中的变量名称

    我需要在一堆文件上运行一个脚本 这些文件的路径被分配给train1 train2 train20 我想 为什么不使用 bash 脚本使其自动执行呢 所以我做了类似的事情 train1 path to first file train2 pa
  • 如何在数组中存储包含双引号的命令参数?

    我有一个 Bash 脚本 它生成 存储和修改数组中的值 这些值稍后用作命令的参数 对于 MCVE 我想到了任意命令bash c echo 0 0 echo 1 1 这解释了我的问题 我将用两个参数调用我的命令 option1 without
  • OSX bash 最小化窗口

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

    我有 bash 脚本 它需要 bash 另一个人尝试运行它 sh script name sh 它失败了 因为 sh 是他的发行版中 dash 的符号链接 ls la bin sh lrwxrwxrwx 1 root root 4 Aug
  • 使用 su 和 Expect 脚本登录用户时遇到问题

    我正在为一个班级制作一个网站 您可以使用用户名和密码登录 然后它会将您带到一个显示您在班级中的成绩的页面 该网站正在运行bash脚本 https github com jduga002 rapache 并将托管在用户已有用户名和密码登录的计
  • 查找哪个程序运行另一个程序

    我有一个 NAS 运行在 Redhat Linux 的有限版本上 我按照指示破解了它 这样我就可以访问 shell 这很有帮助 我还做了一些修改 其他人也做过修改 除了一个问题之外 它们似乎都工作得很好 不知何故 每隔 22 天 系统就会关
  • 为什么 $((true == false)) 在 bash 中计算结果为 1?

    为什么 bash 有以下行为 echo true false 1 我本以为这会打印0 但它打印1 以下事实使情况变得更加复杂 gt echo true 0 gt echo false 0 gt echo true true 1 gt ech
  • 在两次之间每分钟执行一次 Cronjob

    我需要在 crontab 中每分钟运行一个 bash 脚本8 45am and 9 50am每天的 Code 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 8 home pull sh gt ho
  • sh / Bash shell 脚本中 !# (bang-pound) 的含义是什么?

    我想了解这个 Scala 脚本是如何工作的 usr bin env bash exec scala 0 object HelloWorld def main args Array String println Hello world arg
  • Spyder 无法启动:spyder:找不到命令

    我已经安装了spyderpip3 install spyder在苹果电脑上 但是 当我无法从 bash 启动它时 它会显示spyder command not found 我已按照其说明进行操作Github页面 https github c

随机推荐

  • 如何在 Ubuntu 上设置 GOPATH 环境变量?我必须编辑什么文件?

    我正在尝试做一个go get go get github com go sql driver mysql 它失败并出现以下错误 package github com go sql driver mysql cannot download G
  • 比较 SQL 中的图像数据类型

    如何比较Image数据类型 我需要将存储在数据库中的文件与上传的文件进行比较但它说比较Image数据类型是不可能的我什至尝试转换为nchar CONVERT char 1000 FileData 谁能帮我 不要使用image数据类型已被弃用
  • 安卓打开pdf文件

    我正在开发一个 Android 应用程序 我必须打开一些文件 这是我使用意图的代码 public class FacturaActivity extends Activity public void downloadInvoice View
  • FORM布局如何从table切换到div?

    我注意到大多数人都在谈论使用 DIV 和 CSS 标签 文本框对 如何转换一张表 例如 table tr td td tr table
  • Java 中的自动委托

    我想向将在运行时生成的对象添加一些功能 然而 这个对象的接口非常大 并且不受我的控制 我想将对象包装在我自己的类中 该类添加了我想要的功能并将标准接口功能委托给原始对象 有没有什么方法可以在 Java 中执行此操作 而无需为每个对象创建 1
  • C++03 中默认初始化和值初始化之间的区别?

    我一直认为创建一个新对象总是会调用对象的默认构造函数 而构造函数是显式的还是由编译器自动生成的都没有区别 根据这个备受推崇的答案对于另一个问题 这在 C 98 和 C 03 之间发生了微妙的变化 现在的工作方式如下 struct B B i
  • 与 Objective-C 应用程序相比,捆绑的 Swift 库的文件大小开销是多少?

    我在我的一个项目中使用了 Swift 最后是时候将其上传到应用商店了 应用程序的大小是一个问题 因为下载更大尺寸的应用程序不是用户的选择 该应用程序的应用程序商店大小为 40MB 一直没问题 直到安卓版上传了 6MB 我已经在iOS应用程序
  • 从包含大于 Double.MaxValue 值的字符串中解析双精度值

    考虑下面的java代码 String toParse 1 7976931348623157E308 max value of a double in java double parsed Double parseDouble toParse
  • SequelizeJS 中的关联缓慢

    我正在尝试诊断使用 SequlizeJS 作为 ORM 的 Express 应用程序中某些速度变慢的原因 我有一个模型与其他 2 个模型有 2x hasMany 和 hasOne 关系 Update 我已经使用 classMethods a
  • ggmap 扩展缩放或边界

    我正在尝试解决以下问题 我使用 ggplot2 绘制岛屿地图 island get map location c lon 63 247593 lat 17 631598 zoom 14 maptype satellite islandMap
  • GROUP_CONCAT 具有不同分隔符的多个字段

    是否可以做类似的事情 GROUP CONCAT user price SEPARATOR AS items 结果是John3 99 Mike24 99 我需要的是这样的 John 3 99 Mike 24 99 价格字段基本上使用另一种类型
  • Android中读取广告包

    我正在开发一款 BLE 传感器 用于宣传制造商特定数据 有没有示例代码演示如何在 Android 中接收广告数据包并解析其有效负载 这就是我一直在寻找的 BLE 扫描 API BluetoothAdapter startLeScan Sca
  • jquery 检查元素是否有元素

    我正在使用 jquery 1 3 并尝试复制 1 4 has 功能 我需要检查 page 元素是否包含图像 如果不包含 则附加它 是不是类似 var imageid thirdimage if page has imageid undefi
  • Google Maps API:更改标记动画速度

    谷歌地图 API v3目前支持两种类型动画片 for markers 掉落和弹跳 有什么办法我可以speed up弹跳或减速掉落动画 Google Maps API 不支持动画属性或自定义 仅支持像您所说的那样选择 放置 或 弹跳 应该可以
  • 在 MySQL 中将 IP 转换为 Long

    我正在尝试使用ip2country表显示我网站上用户的国旗 我想到的最简单的方法是编写一条 SQL 语句 从会话表中获取用户并查询他们各自的 IP 是否在某个范围内 从而找出他们的国家 国旗 这很简单 但也很危险 因为当有 300 个在线用
  • 上传Excel并将其存储在数据库中?

    我想将Excel文件上传到我们的网页中 然后将相应的数据存储在数据库中 然后我想检索所有数据并以表格格式显示 我有一个代码 但使用该代码无法上传所有 Excel 文件 只能上传单一格式 下面是该函数 但有一些限制 public functi
  • 错误:无法删除该对象,因为在 ObjectStateManager 中未找到该对象

    试图在这里掌握实体框架 但我遇到了一些障碍 我有一个 Get 方法 工作正常并且已经过测试 但我的 Delete 方法不起作用 public static void Delete string name J1Entities db new
  • 如何将宽度设置为“填充父项”的 Android 按钮中的图标和文本居中

    我想要一个 Android 按钮 其中图标 文本居中 我使用 drawableLeft 属性来设置图像 如果按钮的宽度为 wrap content 但我需要拉伸到最大宽度 所以我使用宽度 fill parent 这会将我的图标直接移动到按钮
  • IntelliJ 无法从本地 Maven 存储库加载源

    我正在做一些测试工作 需要使用 JUnit 中我不熟悉的功能 为了更好地理解这些功能 我希望能够在我的项目旁边查看 IntelliJ 内的 JUnit 源代码 本项目使用Maven 我的 pom xml 文件中列出了 jUnit 的以下依赖
  • 在 find + xargs grep 中得到退出代码 123

    这是我的脚本 eval find type f a name h print0 xargs 0 n100 grep f lt echo stdio echo 未找到任何内容 退出代码为 123 如果我稍微修改一下如下 echo stdio