Questions tagged «bash»

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

4
在括号扩展期间如何抑制生成的参数之间的间隔?
我使用以下命令创建了要测试的URL列表: echo -e localhost:8080/reports/{promos,promo-updates,scandown}/{130,139,142}{,-unburdened,-burdened}{,.pdf,.xls,.xlsx,.csv,.preload}"\n" >> urls.txt 不幸的是,urls.txt每个URL后面都有一个空格(当然,第一个除外)。我了解为什么会发生这种情况,并且我意识到我可以通过在sed表达式中使用管道将其剥离,但是我想知道是否有一种抑制它的方法。(这看起来很愚蠢和古怪,但这与很多人不喜欢“虐待猫”的偏好没有什么不同。) 我尝试使用双引号来抑制单词拆分,但是那也抑制了括号的扩展,所以这是不可行的。 我尝试将IFS更改为空字符串,但也没有用: IFS='' echo -e localhost:8080/reports/{promos,promo-updates,scandown}/{130,139,142}{,-unburdened,-burdened}{,.pdf,.xls,.xlsx,.csv,.preload}"\n" >> urls.txt 也没有将其更改为换行符: IFS='\n' echo -e localhost:8080/reports/{promos,promo-updates,scandown}/{130,139,142}{,-unburdened,-burdened}{,.pdf,.xls,.xlsx,.csv,.preload}"\n" >> urls.txt

1
向后搜索Bash中的历史记录吗?
在Bash中,当我点击时Ctrlr,我可以向后搜索命令历史记录。如果我想再次搜索,该怎么办?(该方法Ctrls无效)。 我的重击是: GNU bash, version 4.2.25(1)-release (i686-pc-linux-gnu)

2
无法使用bc对从stdin收到的数字求和
我正在尝试使用以下方法计算文件夹中包含的文件的平均熵: { echo '('; find . -type f -exec entropy {} \; | \ grep -Eo '[0-9.]+$' | \ sed -r 's/$/+/g'; echo '0)/'; find . -type f | wc -l; } | \ tr -d '\n' | bc -l entropy 是一个可执行文件,可计算文件的香农熵,并提供以下形式的输出: $ entropy foo foo: 5.13232 前面的命令错误显示为: (standard_in) 1: …
8 bash  shell  bc 

3
如何在linux终端中查看基本bash语法的参考或备忘单?
每次我需要做一些bash脚本,包括if语句,检查空变量和不存在的文件等。我发现自己在google上找到了一些简单的bash手册或指南。 这些通常太长且太复杂,无法快速回答我手头的问题。 因此,我在想,必须有一些命令或手册页以简短且易于访问的方式涵盖基本的bash语法(用于if语句,检查空变量,不存在的文件等)。我确定我还没有找到命令(man bash似乎不是这样)。 在哪里可以找到?
8 bash 

4
将修改环境的命令输出保存到变量中
如何保存将环境修改为变量的命令的输出? 我正在使用bash shell。 假设我有: function f () { a=3; b=4 ; echo "`date`: $a $b"; } 现在,我可以使用命令来运行f: $ a=0; b=0; f; echo $a; echo $b; echo $c Sat Jun 28 21:27:08 CEST 2014: 3 4 3 4 但是我想将输出保存f到variable c,所以我尝试了: a=0; b=0; c=""; c=$(f); echo $a; echo $b; echo $c 但不幸的是,我得到了: …

2
如何保证$ BASH_ENV的可用性
非交互式,非登录外壳程序将尝试获取$ BASH_ENV中指定的任何脚本。但是,如何确保在cron作业或脚本有机会为任何特定会话设置$ BASH_ENV之前设置$ BASH_ENV?是使用硬编码编译Bash的唯一选择吗?

1
这四个命令(fifo,进程替换,重定向...)之间有什么区别?
我的目标是使用nc和创建一个简单的echo服务器fifo。我并不是在寻找最好的方法,我只是想了解以下命令的语义(何时发生派生,为什么,它发生了什么变化,为什么命令表现不同...)。 我使用bash,所以我不知道如果所有的命令都将使用POSIX工作sh或zsh,ksh... 这是我在标题中提到的四个命令(假设我已经做过mkfifo fifo): cat fifo | nc -l localhost 8888 > fifo exec 3<> fifo && nc -l localhost 8888 <&3 >&3 && exec 3>&- nc -l localhost 8888 <(cat fifo) > fifo nc -l localhost 8888 < fifo > fifo 现在,我希望这4个命令可以执行相同的操作,至少最后两个命令可以执行相同的操作。 第一个命令的行为符合预期,一个简单的回显服务器在客户端关闭连接时将关闭。 行为像1。 我可以连接到服务器,发送数据,但是我什么也收不到。当我关闭客户端连接时,服务器关闭。 无法连接到服务器,服务器将永远监听。

4
删除文件中比给定日期新的行
我坚持如何删除比给定日期新的行。这是文件内容的片段。 buildsave.txt 647919 2013/11/30 647946 2013/11/30 647955 2013/12/01 648266 2013/12/03 648267 2013/12/03 648674 2013/12/04 我想删除比2013/12/03更新的行,仅保留 647919 2013/11/30 647946 2013/11/30 647955 2013/12/01 如何通过bash做到这一点?


2
将参数传递给su提供的shell
man su 说: You can use the -- argument to separate su options from the arguments supplied to the shell. man bash 说: -- A -- signals the end of options and disables further option processing. Any arguments after the -- are treated as filenames and arguments. An argument of …
8 bash  shell  su  options 

3
Bash选项卡完成停止搜索
当我输入bash时,我按“ tab”键自动完成,有时会花费大量时间。例如,读取目录的文件IO耗时超过5秒钟,因此我被挂起,等待IO完成,然后再继续键入。我感到沮丧,然后按Ctrl-C,以便可以重做输入的内容。 Ctrl-C不幸,因为我必须再次输入所有内容。我如何告诉bash停止尝试满足我的自动完成请求。 $ /long/path/to/some/d # once I've typed this, I press <TAB>. I now will be # stuck waiting for perhaps 10 seconds. The only thing I # know to do is Ctrl-C. When I press Ctrl-C, I am forced # to retype the original command string. $


2
对两个完全独立的事物进行grep并将值分配给独立变量的最有效方法是什么?
CentOS 6.x版 我想将curl,grep的输出用于两个完全独立的字符串,并将它们各自的值分配为变量。什么是最有效的方法(不将输出写入磁盘)? 通常,我会考虑使用类似以下内容的脚本: #!/usr/bin/env bash foo1=$(curl https://domain.com/file.xml | grep string1) foo2=$(curl https://domain.com/file.xml | grep string2) 但这最终要花两遍,而且效率极低。有没有更好的办法?希望解决方案涉及更少的通行证吗?

4
正则表达式匹配“ locate”
我正在尝试使用locate命令在主文件夹中查找文件,但是,每当尝试运行此文件时,都不会得到任何结果: locate -i -l 4 --regexp '^\/home\/jack\/[A-Za-z0-9\/\ ]*(My.)*$' 我也尝试过,^\/home\/jack\/^(?!\.)[A-Za-z0-9\/\ ]*(My.)*$但是也不会返回任何结果。 我要测试的文件是 /home/jack/Music/Foals/My Number.flac 我想从搜索中排除隐藏文件的结果。

3
是否可以通过编程方式更改父Shell的工作目录?
我想编写一些代码以允许我切换到通常访问的某些目录。说这个程序是mycd,并且/a/very/long/path/name是我要转到的目录。 所以我可以简单地键入mycd 2而不是cd /a/very/long/path/name。在这里我假设mycd知道2是指/a/very/long/path/name。也可能有mycd 1,mycd 3,...等等。 问题是我必须编写mycd为shell脚本并键入. mycd 2以执行所需的操作,因为否则该脚本将在子脚本中执行,而子脚本不会更改我实际上关心的父shell。 我的问题是: 我可以不用使用它source吗?因为. mycd假定mycd必须是一个shell脚本,并且这可能还会引入一些我不需要的功能。 我可以用其他一些编程语言实现它吗?

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.