Questions tagged «bash»

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

3
为什么不按字面意义处理`|`?
我的问题来自如何将正则表达式存储在shell变量中,从而避免引用shell特有字符的问题?。 为什么会出现错误: $ [[ $a = a|b ]] bash: syntax error in conditional expression: unexpected token `|' bash: syntax error near `|b' 在[[ ... ]]的第二个操作数内部=,应该是一个遍历模式。 这a|b不是有效的浮动模式吗?您能否指出它违反了哪个语法规则? 下面的一些评论指出,这|被解释为管道。 然后将=glob模式更改=~为regex模式进行 |工作 $ [[ $a =~ a|b ]] 我学会了从学习猛砸在P180 我以前的帖子是|在解释之初确认为管道,(其中包括解析例子中的条件表达式)解释的任何其他步骤之前也。那么,如何|在使用时将其识别为regex运算符=~,而又在使用时如何将 其识别为无效使用的管道=?这让我认为第1部分中的语法错误并不意味着将|其解释为管道。 Shell从标准输入或脚本读取的每一行都称为管道。它包含一个或多个用零个或多个管道字符(|)分隔的命令。对于读取的每个管道,shell会将其分解为命令,为管道设置I / O,然后对每个命令执行以下操作(图7-1): 谢谢。
13 bash 


2
Ctrl-R反向搜索后向前搜索的单个快捷方式
我一直都在使用Ctrl+ R,但是当我如此快速地按下它时,我常常会越过我要遵循的命令。 要向前搜索,Ctrl+ S可以用来提供它不使用终端第一(konsole中在我的情况,其中stty -ixon在~/.bashrc修复它)。 但是,我必须按两次:一次进入模式i-search后似乎进入,reverse-i-search第二次实际后退。 有没有一种方法可以消除两次​​按下快捷键的需要?

6
执行前验证命令二进制文件
有什么方法可以检查您从bash脚本实际执行的操作吗? 说你的bash脚本调用几个命令(例如:tar,mail,scp,mysqldump),你愿意以确保tar是真正的,真实的tar,这是由确定root用户是该文件的父目录的所有者,也是唯一一个具有写权限而不是/tmp/surprise/tar拥有者www-data或apache2拥有者。 当然,我知道PATH环境,我很想知道是否可以从正在运行的bash脚本中另外检查一下,如果可以的话,如何检查? 示例:(伪代码) tarfile=$(which tar) isroot=$(ls -l "$tarfile") | grep "root root" #and so on...

8
通过单词反转变量的内容
所以如果我有一个变量 VAR='10 20 30 40 50 60 70 80 90 100' 并回声 echo "$VAR" 10 20 30 40 50 60 70 80 90 100 但是,在脚本的更下方,我需要反转此变量的顺序,以便显示为类似 echo "$VAR" | <code to reverse it> 100 90 80 70 60 50 40 30 20 10 我尝试使用rev,它实际上颠倒了一切,所以它作为 echo "$VAR" | rev 001 09 08 …
13 linux  bash  shell  variable 

2
调用此Bash脚本时,为什么文件参数必须使用引号?
我对Bash脚本非常陌生。我有一个“ testscript”,它用作更高级/有用的脚本的基础: #!/bin/bash files=$1 for a in $files do echo "$a" done 当我不带引号的情况下调用它时,它只会在目录中拾取一个文件: testscript *.txt 但是,当我用引号将其调用时,它可以正常工作并挑选出所有文本文件: testscript '*.txt' 这里发生了什么?


4
{a,b,c}什么时候用bash扩展,什么时候不扩展?
一个bash脚本,其中包含 for i in {a,b}-{1,2}; do echo $i; done 版画 a-1 a-2 b-1 b-2 执行时。这是我所期望的-随着{a,b}构造的扩展。 但是,当(另一个)脚本包含 v={a,b}-{1,2} echo $v 它打印 {a,b}-{1,2} 这不是我所期望的。我希望它能打印出来a-1 a-2 b-1 b-2。显然,该{a,b}构造未扩展。 我可以像这样使它扩展 v=$(echo {a,b}-{1,2}) 基于这些观察,我有两个问题:1){a,b}构造何时扩展?2)是否$(echo {a,b}-{1,2})在需要时触发扩展的首选方法?

1
进入文件夹时设置临时b​​ash别名
有时,我喜欢在文件夹中输入时具有非常自定义的bash别名和键绑定(可以是一个用来从CLI键入许多命令的项目)。 假设当我输入“ projectAlpha /”之类的文件夹时,我期望一些自定义别名,例如: alias doTaskX='./app arg1 arg2...|filter arg1 arg2...' ... 我想到的不只是: 显示有用的消息,显示别名和常用命令 显示我的项目的一些常见的自定义键绑定 但是,一旦我离开项目的根目录,这些设置就将不可用。 今天最好的方法是什么?
13 bash  shell  alias 

2
bash中的“ <Esc> Kv”是什么
当我在bash并按Esc,Shift+ K,V,庆典触发了$EDITOR类似的文件名/tmp/bash-fc-186566385。 为什么会这样,目的是什么? 我可能需要提一下,我正在使用bash运行bash set -o vi。

4
通过滤色器管道命令
Unix中是否存在类似的东西? $ echo "this should show in red" | red $ echo "this should show in green" | green $ echo "this should show in blue" | blue 在这里,我并不是说要显示原汁原味的颜色代码文本(例如,粘贴到文件中)。我只是想让文本实际显示为该颜色。这可能吗?
13 bash  terminal  colors 

1
bash中算术扩展的评估
以下行创建file_c-6.txt但输出5: $ i=5; ls file_a-${i}.txt file_b-${i}.txt &gt; file_c-$(( ++i )).txt; echo $i 5 $ cat file_c-6.txt file_a-5.txt file_b-5.txt 如果删除&gt;,它将列出file_c-6.txt并输出5: 我不明白为什么它没有保留i第一个示例中的值。 $ i=5; ls file_a-${i}.txt file_b-${i}.txt file_c-$(( ++i )).txt; echo $i file_a-5.txt file_b-5.txt file_c-6.txt 6
13 bash 

2
为什么“ bash -x”会破坏此脚本?
我有一个脚本,可以测量某些命令的执行时间。 它需要“ real” time命令,即,例如in中的二进制文件/usr/bin/time(因为内置的bash没有该-f标志)。 下面是一个可以调试的简化脚本: #!/bin/bash TIMESEC=$(echo blah | ( /usr/bin/time -f %e grep blah &gt;/dev/null ) 2&gt;&amp;1 | awk -F. '{print $1}') echo ABC--$TIMESEC--DEF if [ "$TIMESEC" -eq 0 ] ; then echo "we are here!" fi 另存为“ test.sh”并执行: $ bash test.sh ABC--0--DEF we are here! 这样就行了。 现在,让我们尝试通过在bash命令行中添加“ -x”来调试它: …

5
如何基于for循环的结果使该脚本错误退出?
我有一个bash脚本,使用set -o errexit该脚本可以在出错时退出整个脚本。 该脚本运行的curl命令有时无法检索想要的文件-但是,发生这种情况时,脚本不会错误退出。 我添加了一个for循环 暂停几秒钟,然后重试curl命令 false在for循环的底部使用来定义默认的非零退出状态-如果curl命令成功-循环中断并且最后一个命令的退出状态应为零。 #! /bin/bash set -o errexit # ... for (( i=1; i&lt;5; i++ )) do echo "attempt number: "$i curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim if [ -f ~/.vim/autoload/pathogen.vim ] then echo "file has been retrieved by curl, so breaking now..." break; fi echo "curl'ed file …

2
如何在外壳中以不同的方式显示控制字符(^ C,^ D,^ [,…)
当您在外壳中键入控制字符时,它们将使用所谓的“插入符号”显示。例如,转义^[符用插入符号表示。 我喜欢自定义bash shell,使其看起来很酷。我已经例如改变了我PS1,并PS2成为着色。我现在希望控制字符也具有独特的外观,以使其与常规字符更具区别。 $ # Here I type CTRL-C to abort the command. $ blahblah^C ^^ I want these two characters to be displayed differently 有没有办法让我的shell突出显示控制字符? 是否可以使其以粗体显示或以不同于常规文本的颜色显示? 我在这里使用bash shell,但是我没有用这个标签标记问题,bash因为也许有一种适用于许多不同shell的解决方案。 请注意,我不知道在什么级别突出显示控制字符。我首先以为它在外壳本身中。现在,我听说是readline控制bash之类的 shell中控制字符的方式。因此,该问题现在带有标记,readline而我仍在寻找答案。

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.