Questions tagged «bash»

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

4
bash迭代文件列表,除非为空
我以为这很简单-但事实证明它比我预期的要复杂。 我想遍历目录中特定类型的所有文件,所以我这样写: #!/bin/bash for fname in *.zip ; do echo current file is ${fname} done 只要目录中至少有一个匹配文件,此方法就起作用。但是,如果没有匹配的文件,我会得到: current file is *.zip 然后,我尝试: #!/bin/bash FILES=`ls *.zip` for fname in "${FILES}" ; do echo current file is ${fname} done 虽然没有文件时循环主体不执行,但是我从ls收到错误: ls: *.zip: No such file or directory 如何编写一个干净地处理没有匹配文件的循环?
33 bash  parameter 


2
如何将“ screen”内部的输出输出到脚本?
我screen正在运行一个实例,并且需要在中执行一些代码screen,并将结果输出到脚本中。 第一部分很简单,我只是screen -S session_name -X eval 'stuff "$cmd"\015'。 (我修改了在脚本中找到的一行) 第二部分,获取输出,比较棘手。无论大小如何,如何获得整个输出?

2
为什么`sort <(ls -l)`起作用而`sort <(ls -l)`失效?
今天,我通过这篇文章学习了关于fifo的知识:提到了命名管道cat &lt;(ls -l)。 我使用进行了一些实验sort &lt; (ls -l),弹出一个错误: -bash: syntax error near unexpected token `('` 然后我发现我在命令中添加了多余的空间。 但是,为什么这个额外的命令会导致此失败呢?为什么重定向符号必须靠近(?

1
ESC + {:这是什么?在哪里可以进一步了解?
我在bash提示下四处游玩,然后按ESC,再按{,然后,shell在fileglob字符串中显示了所有要完成的文件。例如:如果我键入bash C后跟ESC+{,则shell将显示以下内容:bash CHECK{,1,2{,23{336{,66666},6},3{,6}}}自动完成以C开头的所有可能的文件和目录,显示我制作的所有实验文件和目录。 什么是ESC + {什么?在哪里可以进一步了解? 我在带有bash的CENTOS和Mac OSX上看到了这一点。



6
计算上一个程序的输出行数
我正在尝试计算某个程序产生的输出行数。问题是,该程序需要很长时间才能运行,并且我想向用户显示输出。有没有一种方法可以计算最后一条命令输出的行数? 我可以,program | wc -l但是不会向用户显示输出。据我所知,我必须做program; program | wc -l-但是该程序至少需要一分钟才能运行,所以我不想只为了在底部显示行数就要做一次以上。 编辑: 有没有一种方法可以显示输出(逐行显示),然后在末尾返回计数?

4
查找-exec + vs查找| xargs:选择哪一个?
我了解-exec可以+选择模拟的行为xargs。在任何情况下,您都喜欢一种形式而不是另一种形式吗? 如果只是避免使用管道,我个人倾向于使用第一种形式。我确定肯定开发人员find必须进行适当的优化。我对么?
32 bash  find  pipe  xargs 

2
“ <<(...)”重定向是什么意思?
我已经看到使用以下命令安装了rvm(红宝石版本管理器): bash &lt; &lt;(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer ) 因此,据我了解,我们获得了脚本内容并将其传递给bash(我相信&lt; &lt;并且&lt;&lt;是同一回事?),我对该&lt; &lt;部分感兴趣,可以在网上找到以下说明: &lt;&lt; 令牌意味着将当前输入流用作程序的STDIN,直到看到令牌为止。 这对我来说还不清楚,有人可以用更简单的方式举例或说明吗?

1
文件描述符和Shell脚本
我很难理解一个人如何在shell脚本中使用文件描述符。 我知道诸如 exec 5 &gt; /tmp/foo 因此,将fd 5附加到foo进行编写。 exec 6 &lt; /tmp/bar ...阅读。 exec 5&gt;&amp;- …关闭fd。 现在这是做什么的? #!/bin/bash exec 5 &gt; /tmp/foo exec 6 &lt; /tmp/bar cat &lt;&amp;6 | while read a do echo $a &gt;&amp;5 done 据我了解,&amp;5关闭FD,那么每次调用后输出仍如何成功重定向? 这是来自的复制面食:这里 它声称通过简单的echo $a &gt; file方法使用它会使其更快,但是我无法理解。我将不胜感激任何链接到体面的教程。我用google的功能似乎使我失望。

3
如何在find命令的-exec中使用两个bash命令?
在命令的-exec一部分中可以使用2 条find命令吗? 我已经尝试过类似的东西: find . -name "*" -exec chgrp -v new_group {} ; chmod -v 770 {} \; 我得到: 查找:-exec缺少参数 chmod:无法访问{}:没有这样的文件或目录 chmod:无法访问;:没有这样的文件或目录
32 bash  find 

2
删除文件匹配模式
我需要递归删除所有子目录中的所有文件,其中文件名包含一个数字,后跟一个“ x”,然后一个数字,至少两次。 例: 我想删除这些文件: 'aaa-12x123-123x12.jpg' 'aaa-12x12-123x12-12x123.jpg' 但我不想删除这些文件: 'aaa.jpg' 'aaa-12x12.jpg' 'aaaxaaa-123x123.jpg' 'aaaxaaa-aaaxaaa.jpg' 我该怎么做(从bash shell)
32 bash  files  find  wildcards 

5
getopt,getopts还是手动解析-当我想同时支持长选项和长选项时使用什么?
目前,我正在编写具有以下要求的Bash脚本: 它应该可以在各种Unix / Linux平台上运行 它应该同时支持短和(GNU)长选项 我知道这getopts将是可移植性的首选方式,但是AFAIK不支持长选项。 getopt支持长选项,但BashGuide强烈建议不要这样做: 永远不要使用getopt(1)。getopt无法处理空参数字符串或带有嵌入式空格的参数。请忘记它曾经存在。 因此,仍然有手动解析的选项。这容易出错,会产生很多样板代码,我需要自己处理错误(我想自己getopt(s)进行错误处理)。 那么,在这种情况下首选的选择是什么?


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.