Questions tagged «bash»

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

1
您可以在Bash中使用几种不同的方式创建“别名”?
我只知道两种方式:alias foo=bar和function foo() { bar }。 我问的原因是-突然在我的bash会话之一中-我无法运行ln命令,因为bash出错了-bash: /usr/local/.../ln: No such file or directory(其中/usr/local/.../是PATH环境变量中的条目之一)。 但这不是PATH问题,因为如果我运行which ln它,它会输出预期的二进制文件/usr/bin/ln(如果我指定了绝对路径,则可以很好地运行)。 我还检查了ln我的alias和function声明,没有任何内容: $ declare -f | grep ln $ alias | grep ln 该问题仅在一次bash会话中发生。如果我启动一个新的shell,它会再次正常工作,但是我想知道是在bash的这一特定会话中突然导致此问题的原因。 关于什么可能导致此的任何想法?
10 bash  shell  alias 

3
使用git子模块foreach与功能
我的缩进是要有一个脚本,该脚本根据给出的分支来更新所有git子模块。如果子模块没有这样的分支,则使用master。 这就是我现在所拥有的: #!/bin/bash -x if [ -z $1 ]; then echo "Branch name required." exit fi function pbranch { exists=`git show-ref refs/heads/$branch` if [ -z $exists ]; then branch="master" fi git co $branch git pull origin $branch } branch=$1 git submodule foreach pbranch 但是在运行此脚本时,会引发错误: oleq@pc ~/project> git-fetchmodules major + '[' …
10 bash  git 

3
如何在bash中内联扩展通配符?
我记得bash可以执行以下操作: 假设当我输入以下内容时,当前目录中有3个文件:a,b,c: $> somecommand * 然后按一个键或多个组合键或一个键序列,通配符*在线将展开为: $> somecommand a b c 但我不记得,也无法用谷歌搜索出密钥顺序!帮帮我!
10 bash 

4
Shell脚本中的混合代码。共享变量
该答案讨论了如何从终端中的命令行运行多行Python代码段。我注意到,即使在嵌套缩进的情况下,答案在shell脚本中也非常有效,例如, #!/bin/bash some_text="Hello world" echo $some_text cat <<EOF | python - import sys; for r in range(3): print r for a in range(2): print "hello" EOF 印刷品: 0 hello hello 1 hello hello 2 hello hello 但是,我很难在Shell脚本和Python代码段之间共享变量。 如何在bash脚本中收集python下标的输出?(例如,在变量中$output)。 如何将bash变量(例如$some_text)传递给Python脚本?
10 bash  scripting  zsh  python 


3
在Bash中查找双字符的正则表达式
我正在寻找一个正则表达式,该表达式在命令行(Bash)上查找文本,列表等中所有出现的双字符。 主要问题:有没有一种简单的方法来寻找像序列aa,ll,ttttt,等其中一个定义的正则表达式查找具有相同性质的n个出现次数?我正在寻找的是在非常基本的水平上实现这一目标。在命令行上。在Linux Shell中。 经过大量研究之后,我得出了以下答案-以及由此产生的问题,因此它们只是给我一个提示,指出可能的解决方案。但: a)(e)grep和反斜杠问题 grep 'a\{2\}' 寻找 aa egrep'a{2}' 寻找 aa 问题:设置反冲的必要性是否确实与我使用的命令绑定?如果是这样,有人可以给我提示在这里使用(e)grep时还要考虑什么吗? b)我的问题在这里找到了这个答案,尽管它并不是我要找的东西: grep -E '(.)\1' filename查找具有相同字符的条目出现多次,但不问出现的频率。这接近我要寻找的内容,但我仍然想设置一些重复项。 我可能应该将其分为两个或两个以上的问题,但是我不想在这里充斥这个很棒的网站。 PS:还有一个问题,可能是题外话,但:是in,inside,at或on the shell。并且是on the command line正确的呢?

2
比较时间的好方法?
我需要检查当前时间,如果不是我应该运行它的一天中的适当时间,则中止脚本。另外,如果其他任何人运行它,它都应该中止。 例如:我需要脚本仅在10 PM到2 AM(4小时窗口)之间启动时才能运行。 目前,我正在执行以下操作。花时间date +%k%M与硬编码进行比较 #!/bin/sh currTime=`date +%k%M` check_time_to_run() { tempTime=$1 if [ $tempTime -gt 200 -a $tempTime -lt 2200 ]; then echo "Time is between 2 AM and 10 PM. Aborting." exit 1 else echo "Time is after 10 PM and before 2 AM. Running normally." fi } …

5
bash中路径名称的模式匹配
我想对目录中的子目录列表进行操作。考虑: for x in x86-headers/*/C/populate.sh; do echo $x; done 这给 x86-headers/elf/C/populate.sh x86-headers/gl/C/populate.sh x86-headers/gmp/C/populate.sh x86-headers/gnome2/C/populate.sh x86-headers/gtk2/C/populate.sh x86-headers/jni/C/populate.sh x86-headers/libc/C/populate.sh 但我想值对应于路径的第二部分 elf,gl等我知道如何去掉领先x86-headers。 for x in x86-headers/*/C/populate.sh; do i=${x##x86-headers/}; echo $i; done 这使 elf/C/populate.sh gl/C/populate.sh gmp/C/populate.sh gnome2/C/populate.sh gtk2/C/populate.sh jni/C/populate.sh libc/C/populate.sh 我也知道如何删除路径中的后续术语。即下降一级: cd x86-headers for x in */C/populate.sh; do i=${x%%/*}; echo $i; done 给 elf …

2
为什么$'\ 0'与''相同?
处理几个文件的一种常见方法是-不要为此而生: for f in $(ls); do … 现在,为了防止带有空格或其他奇怪字符的文件,一种幼稚的方法是: find . -type f -print0 | while IFS= read -r -d '' file; … 此处-d ''是,用于将ASCII NUL设置为的缩写-d $'\0'。 但是为什么会这样呢?为什么''和$'\0'一样?是因为Bash的C根目录带有空字符串始终以空值结尾吗?
10 bash 

2
处理从find命令通过管道传输的文件名
我是Bash的新手,正在尝试做一些表面上看起来很简单的事情-在目录层次结构上运行find以获取所有* .wma文件,将输出管道传输到命令,然后将它们转换为mp3并将转换后的文件另存为.mp3。我的想法是该命令应如下所示(我不再使用音频转换命令,而是使用echo作为示例): $ find ./ -name '*.wma' -type f -print0 | xargs -0 -I f echo ${f%.*}.mp3 据我了解,-print0 arg将允许我处理具有空格的文件名(其中许多文件是音乐文件)。然后,我期待(由于xargs的原因)find中的每个文件路径都在f中捕获,并且使用子字符串match / delete从字符串末尾开始,我应该用mp3回显原始文件路径扩展名而不是wma。但是,我看到的不是这个结果,而是: *.mp3 *.mp3 *.mp3 *.mp3 *.mp3 *.mp3 *.mp3 *.mp3 *.mp3 ... 所以我的问题(除了特定的“我在这里做错了什么”之外)是吗?在字符串操作操作中,是否需要对管道操作结果所产生的值与变量赋值所导致的值进行不同的处理? ?

4
列出当前PATH中的所有文件/二进制文件
有没有一种“简便”的方式来运行“ ls -la”样式的命令,以列出当前PATH中的所有文件/可执行二进制文件? (我打算将输出通过管道传递到grep,以查找前缀未知但基本已知的“名称”的命令,这种情况下,bash中的自动补全/制表符实际上是无用的。因此,某种形式的“反向自动完整功能” ...)
10 bash  ls  path  autocomplete 

3
shell脚本仍然可以在没有#的情况下工作!(sha-bang行)
我是shell脚本的新手,很多书都写过在脚本开始时使用#!(sha-bang)行来调用解释器,这将为脚本调用新的shell并逐行进行解释。我的基本脚本仍然没有魔术般运行。 所以我的问题是: 我的基本脚本是从哪里得到解释器的。 脚本如何设法找到解释器。 现在,让我告诉您我的基本脚本,它仅包含以下行: 回声“没有魔力的基本剧本”

2
在ls输出中突出显示最后更新的三个文件
有什么方法可以重载或包装ls命令,以便突出显示/下划线/否则使最后三个修改的文件清晰可见? 我知道我可以ls -rtl按逆向修改时间排序,但是尽管我想快速确定自己或另一个开发人员修改的最后一个文件,但我确实确实需要按字母顺序排列的文件列表。
10 linux  bash  command-line  ls 

5
如何只为bash脚本着色一些关键字?
我正在运行一些单元测试代码。单元测试代码输出常规文本。文本很多,因此我想为用户突出显示重要的关键字。 在这种情况下,关键字为“通过”和“失败”。 您如何将“通过”着色为绿色,将“失败”着色为红色?

3
使用here-doc处理sed和文件
我想对sed命令使用here-doc,并提供要读取的文件和输出文件。 我看过Advanced Bash Scripting指南中的Here-Documents,但是在使用Here -doc时没有提及任何有关常规参数的内容。可能吗 我想要实现以下目标: #!/bin/bash OUT=/tmp/outfile.txt IN=/my_in_file.txt sed $IN << SED_SCRIPT s/a/1/g s/test/full/g SED_SCRIPT > $OUT; 任何帮助都非常感谢。

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.