Questions tagged «bash»

有关为Bash命令外壳编写的脚本的问题。对于具有错误/语法错误的shell脚本,请在此处发布之前,使用shellcheck程序(或在Web shellcheck服务器中的https://shellcheck.net)进行检查。有关Bash交互使用的问题更可能是Super User而不是Stack Overflow上的话题。

7
Bash:将函数作为参数传递
我需要在Bash中将函数作为参数传递。例如,以下代码: function x() { echo "Hello world" } function around() { echo "before" eval $1 echo "after" } around x 应该输出: before Hello world after 我知道eval在这种情况下是不正确的,但这只是一个例子:) 任何的想法?

12
查找空目录UNIX
我需要找到给定目录列表的空目录。有些目录中包含目录。 如果内部目录也是空的,我可以说主目录是空的,否则它不是空的。 我该如何测试? 例如: A>A1(file1),A2 this is not empty beacuse of file1 B>B1(no file) this is empty C>C1,C2 this is empty
90 bash  unix  directory 

5
使用什么工具绘制文件树形图
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow的主题。 6年前关闭。 改善这个问题 给定一个文件树-在其中有目录的目录等,您将如何编写脚本以将文件树的图表创建为图形文件,然后将其嵌入到文字处理器文档中。我更喜欢矢量(SVG,EPS,EMF ...)文件。该工具必须在Windows上运行,但最好在跨平台上运行。该工具可以是商业的,但是优选地是免费的。 更新2012-02-20。该问题与文档子项目有关。我不得不解释文件(特别是资源和配置文件)所在的位置。我最终使用了dos tree命令。我两个屏幕都抓取了结果(对于短文件夹),对于较长的文件夹,我都重定向到了文本文件,然后对其进行了编辑。例如,如果一个子文件夹包含20个相似类型的文件,这些文件对于我提出的要点分别并不重要,那么我只留下了两个,其余的替换为一行。然后,我打印出该文件以再次进行控制台,然后屏幕抓取它。在抓屏之前,我不得不将前景色修改为黑色,将背景色修改为白色,以使其看起来更好,并在应打印的文档中节省墨水。 令人惊讶的是,没有更好的工具。如果有时间,我会写一个Visio Extension或可能是产生SVG的某些命令行。SVG是HTML5次标准的,甚至可以轻松地包含到在线文档中。 更新2017-10-17。很抱歉,这个问题已被删除,因为它不属于SO。所以我重新措词了。我需要一个脚本-而不是所见即所得的工具。因此,任何脚本语言或库都可以。所以这是一个代码-写作问题,我相信属于SO。

3
Bash命令行和输入限制
在bash(或其他shell)中是否存在某种字符限制,以便可以输入多长时间?如果是这样,那个字符限制是多少? 即是否有可能在bash中编写命令而导致命令执行时间太长?如果没有要求的限制,是否有建议的限制?

5
我该如何读取标准输入?[重复]
这个问题已经在这里有了答案: 在bash脚本中将sed未知选项设置为s [重复] (4个答案) 上个月关闭。 我在尝试 grep searchterm myfile.csv | sed 's/replaceme/withthis/g' 并得到 unknown option to `s' 我究竟做错了什么? 编辑: 根据注释,代码实际上是正确的。我的完整代码类似于以下内容 grep searchterm myfile.csv | sed 's/replaceme/withthis/g' # my comment 似乎出于某种原因,我的评论被作为sed的输入。很奇怪。
90 linux  bash  shell 

8
在printf中使用颜色
当这样写时,它以蓝色输出文本: printf "\e[1;34mThis is a blue text.\e[0m" 但我想在printf中定义格式: printf '%-6s' "This is text" 现在,我尝试了几种添加颜色的方法,但没有成功: printf '%-6s' "\e[1;34mThis is text\e[0m" 我什至尝试添加属性代码来格式化,但没有成功。这是行不通的,在任何地方都找不到将颜色添加到printf的示例,该示例已经定义了格式。
90 linux  bash  colors  printf 

8
在意外的bash出口中删除创建的临时文件
我正在从bash脚本创建临时文件。我将在处理结束时删除它们,但是由于脚本运行了很长时间,因此,如果我在运行过程中将其杀死或仅按CTRL-C杀死,则不会删除临时文件。 有没有办法可以在执行结束之前捕获这些事件并清理文件? 另外,对于这些临时文件的命名和位置是否存在某种最佳实践? 我目前不确定在使用之间: TMP1=`mktemp -p /tmp` TMP2=`mktemp -p /tmp` ... 和 TMP1=/tmp/`basename $0`1.$$ TMP2=/tmp/`basename $0`2.$$ ... 还是有更好的解决方案?

2
在Mac和Linux上使用终端之间有什么区别?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Stack Overflow 的主题。 8年前关闭。 改善这个问题 最近四年来我一直在使用Ubuntu。 我对shell命令有基本的了解,我更喜欢在终端中工作而不是使用GUI。最近,我开始使用Mac。 我已经在Mac终端中尝试了一些终端命令(我在Ubuntu上使用过),并且它的响应方式几乎相同。 我使用的命令,它们执行的任务或我应注意的Shell环境是否存在重大差异?
89 macos  bash  shell  ubuntu  terminal 

10
在新的Mac OS X终端窗口中运行命令
我一直在尝试找出如何在新的Max OS X Terminal.app窗口中运行bash命令。作为示例,这是在新的bash进程中运行命令的方式: bash -c "my command here" 但这将重用现有的终端窗口,而不是创建一个新的窗口。我想要类似的东西: Terminal.app -c "my command here" 但是,当然这是行不通的。我知道“ open -a Terminal.app”命令,但是我看不到如何将参数转发到终端,甚至我没有使用什么参数。
89 macos  bash  terminal 


16
tar:将所有文件和目录添加到当前目录中,包括.svn等
我尝试在tar.gz目录中使用 tar -czf workspace.tar.gz * 生成的tar包含.svn子目录中的目录,但不包含当前目录中的目录(因为*在传递给tar之前已扩展为仅“可见”文件 我尝试过了 tar -czf workspace.tar.gz .相反,但是然后我得到一个错误,因为“。” 阅读时发生了变化: tar: ./workspace.tar.gz: file changed as we read it 有没有技巧可以*匹配目录中的所有文件(包括点缀)? (在Linux SLES-11(2.6.27.19)上使用bash

7
检查数组中的索引或键的最简单方法?
使用: set -o nounset 有一个索引数组,如: myArray=( "red" "black" "blue" ) 检查元素1是否设置的最短方法是什么? 我有时会使用以下内容: test "${#myArray[@]}" -gt "1" && echo "1 exists" || echo "1 doesn't exist" 我想知道是否有首选的。 如何处理非连续索引? myArray=() myArray[12]="red" myArray[51]="black" myArray[129]="blue" 例如如何快速检查51已经设置的? 如何处理关联数组? declare -A myArray myArray["key1"]="red" myArray["key2"]="black" myArray["key3"]="blue" 例如如何快速检查key2已使用的?
89 arrays  bash  indexing  key 

3
cp -r没有隐藏文件
我有两个目录,一个是空的。 第一个目录有许多带有隐藏文件的子目录。当我cp -r从第一个目录满意到第二个目录时,隐藏文件也被复制。有什么办法可以逃脱它们吗?
89 linux  bash  cp 

9
如何在当前shell中执行命令的输出?
我很了解source(aka .)实用程序,它将从文件中获取内容并在当前shell中执行它们。 现在,我将一些文本转换为shell命令,然后运行它们,如下所示: $ ls | sed ... | sh ls只是一个随机的例子,原始文本可以是任何东西。sed也只是一个转换文本的示例。有趣的是sh。我用管道输送我所得到的一切sh,然后运行它。 我的问题是,这意味着启动一个新的子外壳。我宁愿命令在我当前的shell中运行。就像我能够使用source some-file,如果我在文本文件中包含命令。 我不想创建一个临时文件,因为感觉很脏。 另外,我想以与当前shell完全相同的特性启动子shell。 更新 好的,使用反引号的解决方案当然可以工作,但是我经常需要在检查和更改输出时执行此操作,因此我更希望是否有一种将结果最终传递给某些对象的方法。 悲伤的更新 嗯,这/dev/stdin东西看起来很漂亮,但是在更复杂的情况下,它没有用。 所以,我有这个: find . -type f -iname '*.doc' | ack -v '\.doc$' | perl -pe 's/^((.*)\.doc)$/git mv -f $1 $2.doc/i' | source /dev/stdin 这样可以确保所有.doc文件的扩展名都小写。 顺便说一句,可以使用进行处理xargs,但这不重要。 find . -type f -iname '*.doc' | …
89 bash  shell  unix  pipe 

4
执行bash脚本时如何显示行号
我使用的测试脚本包含很多命令,并且会生成大量输出,我使用set -x或set -v和set -e,所以脚本会在发生错误时停止。但是,我仍然很难定位执行停止在哪一行以定位问题。有没有一种方法可以在执行每行之前输出脚本的行号?还是输出命令产生之前的行号set -x?否则任何可以解决我的脚本行位置问题的方法都将提供很大的帮助。谢谢。
89 linux  bash  testing 

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.