Questions tagged «bash»

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

3
bash中的“ true”的目的是什么?然后”
我已经一起破解了这个bash脚本,该脚本可以测试用户是否具有超级用户特权,如果没有,它会要求他们。最终,我试图反转第二个“ if”语句,以便删除以下两行(回显“ password ok”和下一行的else) # Root user only if [[ "$EUID" != 0 ]]; then sudo -k # make sure to ask for password on next sudo if sudo true; then echo "Password ok" else echo "Aborting script" exit 1 fi fi echo "do my ops" 第四行“真”的目的仅仅是一个空语句吗? 我需要在第四行反转测试,该怎么做?这是我尝试过的: if sudo …
20 bash  sudo 

5
在Bash中键入单个感叹号有什么作用?
Bash使用惊叹号扩展历史记录,如对此问题的答案所述(例如,使用来sudo !!运行先前的命令行sudo)。但是,我找不到任何地方可以解释运行以下命令(即单个感叹号)的作用: ! 它似乎什么也没打印,并以1退出,但是我不确定为什么要这样做。我已经在网上和Bash手册页中进行了查找,但是除了它是一个“保留字”这一事实外,什么都找不到,但是},并运行以下命令: } 打印错误: bash: syntax error near unexpected token `}'


2
为什么“命令1> file.txt 2> file.txt”的行为与“命令1> file.txt 2>&1”不同?
当您要将stdout和stderr都重定向到同一文件时,可以使用command 1>file.txt 2>&1或来实现command &>file.txt。但是,为什么行为command 1>file.txt 2>file.txt与以上两个命令不同? 以下是验证命令。 $ cat redirect.sh #!/bin/bash { echo -e "output\noutput" && echo -e "error" 1>&2; } 1>file.txt 2>&1 { echo -e "output\noutput" && echo -e "error" 1>&2; } 1>file1.txt 2>file1.txt { echo -e "error" 1>&2 && echo -e "output\noutput"; } 1>file2.txt 2>file2.txt { echo -e …

1
找到匹配项后Grep缓慢退出?
我正在尝试编写一个bash脚本来轮询btmon的设备连接。我有一个可行的解决方案,但是它的运行速度非常慢,而且看起来grep在找到匹配项(约25秒)后退出非常慢。我怎样做才能加快速度grep或完全避免使用它? #!/bin/bash COUNTER=0 while : do until btmon | grep -m 1 '@ Device Connected' do : done let COUNTER=COUNTER+1 echo on 0 | cec-client RPI -s -d 1 sleep 5 echo as | cec-client RPI -s -d 1 until btmon | grep -m 1 '@ Device Disconnected' do : …
20 bash  grep 


4
使用`eval echo'总是安全吗?
eval通常不建议使用,因为它允许执行任意代码。但是,如果使用eval echo,则看起来字符串的其余部分将成为的参数,echo因此应该是安全的。我对此是否正确?
20 bash  echo 

2
嵌套的双引号在投票很高的单行代码中
一个具有> 3.5K票数的StackOverflow 答案具有此一类功能,可用于分配给DIR当前bash脚本的目录: DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" 我对嵌套的双引号感到困惑。据我所知,以下片段被双引号括起来: "$( cd " "${BASH_SOURCE[0]}" " && pwd )" ...,而=()$( dirname和())右边的其他所有内容均未引用。换句话说,我假设第二,第四和第六个"字符分别“关闭”了第一,第三和第五个"字符。 我知道"${BASH_SOURCE[0]}"实现了双引号,但是其他两对双引号的目的是什么? 另一方面,(尽管获得较高的投票分数)上述片段不正确,那么实现其名义意图的正确方法是什么? (按名义意图,我的意思是:将pwd第一个cd-ing 之后的返回值收集到由返回的目录中dirname "${BASH_SOURCE[0]}",并cd在子外壳中执行-ing,以便$PWD父外壳的保持不变。)

4
有时历史记录命令未存储在.bash_history中
我昨天在CentOS 7中发布了许多命令。但是当我今天想检索这些命令时,我发现没有任何记录。当我打开文件时.bash_history,我仍然找不到昨天发出的命令,但几天前我发现了许多旧命令。为什么不存储最近的命令?如何增加历史记录功能?

6
如何以交互方式在bash中输入n个数字的n个重复
我想运行命令 foo --bar=baz <16 zeroes> 如何有效输入16个零*?如果按住不放Alt,1 6 0它将重复下一次操作160次,这不是我想要的。在emacs中,我可以使用Alt-[number]或Ctrl-u 1 6 Ctrl-u 0,但是在bash中,它会Ctrl-u杀死当前正在键入的行,而下一个零只会向该行添加一个0。 如果我做 foo --bar=baz $(printf '0%.0s' {1..16}) 然后history准确显示以上内容,而不显示foo --bar=baz 0000000000000000;即bash的行为不符合我的要求。(编辑:指向正,我想输入一些零而不使用$(...)命令替换) (*)我猜“有效”的技术定义是“使用O(log n)击键”,最好是击键的数量等于16中的位数(对于16的所有值)加上一个常数;这个定义使emacs示例具有效率。

5
为什么论据中间存在一个EOF?
我想编写一个小的bash函数,以便我可以告诉bash,import os否则from sys import stdout它将生成一个新的Python解释器,其中包含导入的模块。 后一个from函数如下所示: from () { echo "from $@" | xxd python3 -i -c "from $@" } 如果我这样称呼: $ from sys import stdout 00000000: 6672 6f6d 2073 7973 2069 6d70 6f72 7420 from sys import 00000010: 7374 646f 7574 0a stdout. File "<string>", line 1 from sys …
20 bash  python 

3
`<&-`是做什么的?
我将Bash的一个片段复制到远程执行的ssh命令的后台: ssh user@remote &lt;&lt;CMD some process &lt;&amp;- &gt;log 2&gt;error &amp; CMD 怎么&lt;&amp;-办? 我的猜测是,它与&lt; /dev/null 我的下一个理解是,三个主要的文件描述符(stdin,stdout,stderr)需要被关闭,以防止: 作业正在后台运行,脚本正在退出-发生冲突吗? 当终端关闭时,正在接受来自终端的stdin的所有进程都关闭了吗?

2
括号表达式(无范围)与bash中的意外字符匹配
我在Linux上使用bash。我从以下if语句中获得了成功,但是这不应该返回失败代码吗? if [[ ■ = [⅕⅖⅗] ]] ; then echo yes ; fi 正方形不等于任何字符,所以我看不到为什么我得到一个成功代码。 对于我来说,保持双括号很重要。 在这种情况下,还有其他方法可以做一个范围吗,或者还有什么其他建议?
20 bash  locale  test 

2
重用和修改条目时如何停止bash编辑历史记录?
当您重新使用和编辑上一个命令时,某些bash实例会更改命令历史记录,而其他实例显然不会。我一直在搜索,但是找不到说明如何防止历史记录中的命令在重用和编辑时被修改的内容。 有这样的问题这一个,但似乎说如何应对历史正在编辑。我最近才遇到一个bash实例,该实例在您重用命令时会编辑历史记录-我使用过的所有以前的bash shell(据我所知)都配置为在重用时不更改历史记录并编辑命令。(也许在过去的十五年左右的时间里,我一直没有适当注意我的外壳历史...) 因此,这可能是最好的问题:我可以告诉bash从不修改历史记录吗?


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.