如何在Bash或Unix shell中检查一个字符串的第一个字符?
我在Unix中编写一个脚本,我必须检查字符串中的第一个字符是否为"/",如果是branch. 例如,我有一个字符串: /some/directory/file 我希望它返回1,并且: server@10.200.200.20:/some/directory/file 返回0. 解决方案 有很多方法可以做到这一点.您可以在双括号中使用通配符: str="/some/directory/file" if [[ $str == /* ]]; then echo 1; else echo 0; fi 您可以使用子字符串扩展: if [[ ${str:0:1} == "/" ]] ; then echo 1; else echo 0; fi 或正则: if [[ $str =~ ^/ ]]; then echo 1; else echo 0; fi 其他解决方案 也考虑与大多数基于SH的外壳兼容的案例语句: case $str
18 2024-03-28
编程技术问答社区
Linux的退出状态查找命令总是显示成功
我打算从脚本内部使用Linux"查找"命令.如果" find"命令在提到的任何路径中找到可执行文件,而不是确切的路径,我会感到困扰.我正在测试以下: find /usr/bin /usr/sbin /bin /sbin -name ntpd > /dev/null 2>&1; echo $? 0 find /usr/bin /usr/sbin /bin /sbin -name ntp > /dev/null 2>&1; echo $? 0 find /usr/bin /usr/sbin /bin /sbin -name ntpd /usr/sbin/ntpd # find /usr/bin /usr/sbin /bin /sbin -name ntp # 为什么find在两种情况下都给出0的退出状态 当找不到指定文件时, 解决方案 find不会更改退出状态.您可以将其输出输送到grep以检查其输出的任何内容: if find /usr/bin /usr/sbin
28 2024-03-28
编程技术问答社区
如何判断bash脚本中的任何命令是否失败(非零退出状态)?
我想知道是否以非零状态退出BASH脚本中的任何命令. 我想要类似于set -e功能的东西,除了我不希望它以非零状态退出时它退出.我希望它运行整个脚本,然后我想知道: a)所有带有退出状态的命令0 -or- b)一个或多个具有非零状态的命令 例如,给定以下内容: #!/bin/bash command1 # exits with status 1 command2 # exits with status 0 command3 # exits with status 0 我希望所有三个命令运行.运行脚本后,我想表明至少一个以非零状态退出的命令. 解决方案 在ERR上设置陷阱: #!/bin/bash err=0 trap 'err=1' ERR command1 command2 command3 test $err = 0 # Return non-zero if any command failed 您甚至可能会进行一些内省,
8 2024-03-28
编程技术问答社区
为什么我的脚本在下完命令后会突然退出?
我正在尝试按照以下说明生成dash的文档: 我使用的是MacOS 10.8.4和默认的bash. #!/usr/bin/env bash set -e mkdir -p $1.docset/Contents/Resources/Documents/ echo "THIS RUNS" wget -rkp -l3 -np -nH --cut-dirs=1 --directory-prefix="./"$1".docset/Contents/Resources/Documents/" $2 echo "THIS DOES NOT RUN" sed "s/NAME/$1/g" template > $1.docset/Contents/Info.plist touch $1.docset/Contents/Resources/docSet.dsidx # (script continues) 我查看了其他帖子,例如我的shell脚本在执行后停止但是我在这里不使用exec.
8 2024-03-28
编程技术问答社区
Bash退出状态的速记增量符号
我注意到明显的在Bash的(( ))符号的返回状态中不一致. 考虑以下 $> A=0 $> ((A=A+1)) $> echo $? $A 0 1 但是,使用其他众所周知的速记增量符号产量: $> A=0 $> ((A++)) $> echo $? $A 1 1 如果脚本中具有内置set -e,则第二个符号将导致脚本退出,因为((A++))返回的非零的退出状态.这个问题或多或少在这个相关的问题.但这似乎并不能解释两个符号的退出状态((A=A+1))和((A++)) 的差异 ((A++))当A等于0时,似乎返回1. (免责声明:我尚未进行详尽的测试.在Bash 4.1.2和4.2.25中进行了测试.因此,最后一个问题归结为: 为什么A=0; ((A++))返回1? 解决方案 a++是灌溉后:评估语句后它会增加.相比之下,++a递增.因此: $ a=0 ; ((a++)) ; echo $a $? 1 1 $ a=0 ; ((++a)) ; ec
14 2024-03-27
编程技术问答社区
如果一个命令失败了,如何退出?
我是炮弹的菜鸟.如果命令失败,我想打印一条消息并退出脚本.我尝试了: my_command && (echo 'my_command failed; exit) 但它行不通.它不断执行脚本中此行之后的指令.我正在使用ubuntu和bash. 解决方案 尝试: my_command || { echo 'my_command failed' ; exit 1; } 四个更改: 更改&& || 使用{ }代替( ) 引入; exit和 之后 {之后的空格和} 之前 由于您要在命令失败(以非零值退出)时打印消息并退出,因此您需要||而不是&&. cmd1 && cmd2 将运行cmd1 cmd1成功(退出值0). cmd1 || cmd2 将运行cmd1 cmd1失败时(退出值非零). 使用( )使它们内部的命令在A sub-shell 中运行,并从那里调用exit会导致您退出子壳而不是退出您的原始外壳,因此在原始外壳中
12 2024-03-27
编程技术问答社区
在Windows的NASM中设置退出状态
我目前正在尝试学习一些基本的X86组件,并遇到一些在Windows上运行它的困难.我要做的就是设置退出状态.如果我在Linux上,我知道该怎么做: global _start _start: mov eax,1 mov ebx, 52 int 0x80 显然,这将给出退出状态52.我该如何在Windows上执行此操作?我看了看,但找不到明确的答案. 解决方案 如何在Windows上执行此操作?我看了看,但找不到明确的答案. 这就是这里的问题:有 no 明确的答案. Windoze是一团糟.使用Linux并开心. : - ) 已经提到,没有通用与OS接口的方法. 例如,在wind0上,它将是int 21h: segment code start: mov ah, 0x4C ; function `exit – terminate with return code` mov al, 52 ; ret
18 2024-03-17
编程技术问答社区
如何从main()返回一个大于8位的数字?
据我所知,从r0返回的退出代码仅使用此寄存器的最低位.我如何返回一个高于8位的值? 这是ARMV7代码: @ looping.s @ calculates sum of integers from 1 to 100 .text .balign 4 .global main main: MOV r1, #0 @ r1 = 0 as sum MOV r2, #0 @ r2 = 0 as counter loop: ADD r2, r2, #1 @ counter = counter + 1 ADD r1, r1, r2 @ sum = sum + counter CMP r2, #100 @ counter - 100 BLT loop @ if counter
16 2024-03-17
编程技术问答社区
ffmpeg退出状态 -1094995529
我正在开发一个应用程序,该应用程序使在Windows上,返回-1094995529> 的非传统退出状态的调用.此退出状态始终如一地给出,并且有一些次要讨论 为什么给出了这个值,在哪里记录了?我可以期望在允许退出状态更受限的Unix机器上这种状态会有所不同吗? 解决方案 来自ffmpeg的错误代码(来自avutil的error.h): 事实证明您指定的值是: #define AVERROR_INVALIDDATA FFERRTAG( 'I','N','D','A') -1094995529变为-0x41444e49,当您在ACSII中查看这些字母时,0x41 ='a',0x44 ='d',0x4e ='n和0x49 ='i'.由于宏/等,事情被逆转了,因此从#Define片段中可以看到的Adni成为Inda,是Averror_invaliddata定义的fferrtag('i'i','n','d',a'). 其余的错误代码都在该文件中,我在此处粘贴
14 2023-12-05
编程技术问答社区
unix shell,用管道的孩子获得退出代码
假设我在unix shell 中这样做 $ some-script.sh | grep mytext $ echo $? 这将为我提供grep 的退出代码 但是如何获得some-script.sh 的退出代码 编辑 假设管道操作是不可变的.即,我无法将其分开,并分开运行两个命令 解决方案 有多种解决方案,这取决于您要准确地做什么. 最简单,最容易理解的方法是将输出发送到文件,然后在保存退出代码后将其抓取: tmpfile=$(mktemp) ./some-script.sh > $tmpfile retval=$? grep mytext $tmpfile rm tmpfile 其他解决方案 You need to use a trick to pass the exit codes to the main shell. You can do it using a pipe(2). Instead of running
10 2023-11-08
编程技术问答社区
linux命令返回的退出状态1的含义
Linux命令返回的退出状态1的含义是什么?像127退出状态一样指示"找不到命令". 我访问过 .html 页面,这是否意味着退出状态1没有特殊的特殊含义? 解决方案 唯一的一般惯例是零退出状态表示成功,而任何非零退出状态都是失败. 许多 - 但不是全部 - 命令行工具返回语法错误的退出代码1,即您的参数太少或无效的选项. 许多 - 但是,a,不是全部 - 命令行工具具有手动页面.按照惯例,它应该记录该程序的退出代码,但许多程序不进行. 其他解决方案 您可以使用man. 看到退出状态的值 给出下面的示例: man ls 现在搜索字符串退出 在下面添加屏幕截图: 其他解决方案 我现在具有相同的退出状态;在我的情况下,这是没有足够的内存.通过增加交换内存来解决问题.
82 2023-03-21
编程技术问答社区
Docker运行退出代码的权威列表是什么?
表示歉意,如果有人提出要求,但是在 Docker Documentation 我可以找到一个权威的出口代码清单(也称为Exit的权威列表)地位).奇怪!我看到有关使其保持一致的建议,但是Docker.com上没有任何文件. 有人知道可以在哪里找到出口代码吗? 解决方案 docker> = 1.10参见遵循标准 a href =" http://tldp.org/ldp/abs/html/exitcodes.html" rel =" noreferrer"> chroot exit代码: 125:docker run本身失败 126:无法调用包含的命令 127:如果无法找到包含的命令 128 + n致命错误信号n: 130 = (128+2)由Control-C 终止的容器 137 = (128+9)容器收到了SIGKILL 143 = (128+15)容器接收到SIGTERM 检查完整列表的signal的人页面(在CMD类型man 7 signal上
38 2022-08-28
编程技术问答社区
如何在Bash或UNIX shell中检查一个字符串的第一个字符?
我正在 UNIX 中编写一个脚本,我必须检查字符串中的第一个字符是否为“/",如果是,则进行分支. 例如我有一个字符串: /some/directory/file 我希望它返回 1,并且: server@10.200.200.20:/some/directory/file 返回 0. 解决方案 有很多方法可以做到这一点.您可以在双括号中使用通配符: str="/some/directory/file" if [[ $str == /* ]]; then echo 1; else echo 0; fi 您可以使用子字符串扩展: if [[ ${str:0:1} == "/" ]] ; then echo 1; else echo 0; fi 或者一个正则表达式: if [[ $str =~ ^/ ]]; then echo 1; else echo 0; fi
464 2022-08-14
编程技术问答社区
linux命令产生的退出状态1的含义
谁能告诉mi,linux命令返回的退出状态1是什么意思.像 127 退出状态表示“找不到命令".我访问过 http://linux.die.net/abs-guide/exitcodes.html 页面,是否表示退出状态 1 没有特别的特殊含义. 解决方案 唯一的通用约定是退出状态为零表示成功,而任何非零退出状态都表示失败. 许多——但肯定不是全部——命令行工具返回退出代码 1 表示语法错误,即您的参数太少或选项无效. 许多——但遗憾的是,并非所有——命令行工具都有一个手册页.按照惯例,它应该记录程序的退出代码,但很多都没有.
1926 2022-07-17
编程技术问答社区