Questions tagged «bash»

与其他Bourne / POSIX shell相对,GNU的Bourne Again SHell特有的问题。对于一般关于Unix shell的问题,请改用/ shell标记。

6
如何以与pipefail类似的方式让bash在反补失败时退出?
因此,我想尽可能地加强bash脚本(并且在无法委托给Python / Ruby这样的语言时),以确保不会出错。 在这种情况下,我有一个strict.sh,其中包含如下内容: set -e set -u set -o pipefail 并以其他脚本来源。但是,尽管pipefail会加速: false | echo it kept going | true 它不会拾起: echo The output is '`false; echo something else`' 输出将是 输出为'' False返回非零状态和no-stdout。在管道中,该方法将失败,但此处未捕获该错误。当实际上是将计算结果存储在变量中以供以后使用,并且该值设置为空时,这可能会导致以后出现问题。 所以-有没有办法让bash将反引号内的非零返回码视为足以退出的原因?

2
为什么printf“缩小”变音符号?
如果我执行以下简单脚本: #!/bin/bash printf "%-20s %s\n" "Früchte und Gemüse" "foo" printf "%-20s %s\n" "Milchprodukte" "bar" printf "%-20s %s\n" "12345678901234567890" "baz" 它打印: Früchte und Gemüse foo Milchprodukte bar 12345678901234567890 baz 也就是说,带有变音符号的文字(例如ü)会被每个变音符号“缩小”一个字符。 当然,我在某个地方有一些错误的设置,但是我无法弄清楚可能是哪个。 如果文件的编码为UTF-8,则会发生这种情况。 如果我将其编码更改为latin-1,对齐方式是正确的,但是变音符号却被错误地呈现: Fr�chte und Gem�se foo Milchprodukte bar 12345678901234567890 baz
54 bash  unicode  printf 

10
bash:测试是否设置了$ WORD
我正在寻找中的构造bash,以确定变量$WORD是否为已定义单词之一。我需要这样的东西: if "$WORD" in dog cat horse ; then echo yes else echo no fi bash有这样的构造吗?如果没有,最接近的是什么?




6
用下划线连接两个变量
我需要连接两个变量来创建具有下划线的文件名。让我们调用变量,$FILENAME并$EXTENSION从文件中读取文件名。 FILENAME=Hello EXTENSION=WORLD.txt 现在... 我尝试了以下操作,但未成功: NAME=${FILENAME}_$EXTENSION NAME=${FILENAME}'_'$EXTENSION NAME=$FILENAME\\_$EXTENSION 我总是得到某种奇怪的输出。通常下划线优先。 我需要它 echo $NAME Hello_WORLD.txt

5
通过第一次出现的分隔符分割字符串
我有以下格式的字符串 id;some text here with possible ; inside 并希望在第一次出现时将其拆分为2个字符串;。因此,应为:id和some text here with possible ; inside 我知道如何分割字符串(例如,使用cut -d ';' -f1),但是由于我;位于左侧,因此它将分割为更多部分。

3
如何使环境变量在shell脚本中“导出”?
我有多个Amazon EC2帐户,并希望能够$EC2_HOME使用脚本快速切换变量,例如。 我有一个这样的shell脚本设置: #!/bin/sh export EC2_HOME=/home/me/.ec2 echo $EC2_HOME 当我运行脚本时,我知道EC2_HOME已经设置好了,但是我认为使用export脚本会使变量在脚本完成后继续存在。它不会,因为运行echo $EC_HOME不会显示任何内容。 我知道这一定是非常基本的Linux脚本知识,但是我不知道。我尝试寻找相关问题时没有运气-如果这是重复的话,我深表歉意。

2
创建符号链接-如果存在则覆盖
我想提取数据/path/to/data/folder/month/date/hour/minute/file并将其符号链接到,/path/to/recent/file并在每次创建文件时自动执行此操作。 假设我不知道是否/path/to/recent/file存在,我该如何创建它(如果它不存在)或替换它(如果它存在)?我敢肯定,我只能检查它是否存在,然后进行删除,符号链接,但是我想知道是否有一个简单的命令可以一步完成我想做的事情。
54 bash  symlink 

9
如何从ls命令仅回显一列输出?
可以说当我执行ls命令时,输出为: file1 file2 file3 file4 是否只能显示输出的特定列,在这种情况下为file2?我尝试了以下操作,但均未成功: echo ls | $2 基本上我只想回显第二列,在这种情况下,我想回显: file2
54 bash  ls  parameter  arguments 


4
Bash star *通配符是否总是产生(升序)排序列表?
我有一个目录,其中填充了一些文件名logXX,其中XX是一个两个字符,零填充的大写十六进制数字,例如: log00 log01 log02 ... log0A log0B log0C ... log4E log4F log50 ... 通常,总共少于20个或30个文件。我的特定系统上的日期和时间不可靠(嵌入式系统没有可靠的NTP或GPS时间源)。但是,文件名将可靠地增加,如上所示。 我希望grep浏览所有文件中某个类型的最新日志条目,我希望将cat这些文件放在一起,例如... cat /tmp/logs/log* | grep 'WARNING 07 -' | tail -n1 然而,它发生,我认为不同版本bash或sh或zsh等可能有关于如何不同的想法*展开。 该man bash页面没有说明的扩展是否*一定是匹配文件名的绝对升序字母列表。每当我在所有可用的系统上尝试过该功能时,它的数量似乎都会不断增加,但是它是行为定义的还是特定于实现的? 换句话说,我可以绝对依赖cat /tmp/logs/log*于按字母顺序将所有日志文件连接在一起吗?
53 bash  shell  wildcards 

6
有什么理由让shebang指向/ bin / sh而不是/ bin / bash吗?
在我见过的大多数shell脚本中(除了我自己没有写过的脚本之外),我注意到shebang设置为#!/bin/sh。对于旧的脚本,这并不令我感到意外,但是在相当新的脚本中也是如此。 是否有理由宁愿使用/bin/shover /bin/bash,因为bash在十年前的许多Linux和BSD机器上,它普遍存在并且通常是默认的吗?
53 bash  shell  history  shebang 

4
从全局匹配中排除一种模式
我有几个具有相同基本文件名的文件。我只想删除一个 foo.org #keep foo.tex #delete foo.fls #delete foo.bib #delete etc 如果我不需要保留一个,那么我知道可以使用rm foo.*。 TLDP证明^可以取消匹配。通过反复试验,我发现 rm foo.*[^org] 可以满足我的需求,但我不太了解语法。 另外,虽然我的用例不受限制,但我认为此模式也忽略了foo.o和foo.or。这一模式如何工作的,以及什么将一个水珠忽略只有 foo.org样子?
53 bash  wildcards 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.