Questions tagged «bash»

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

30
如何从脚本本身中获取Bash脚本的源目录
如何在脚本内部获取Bash脚本所在目录的路径? 我想将Bash脚本用作另一个应用程序的启动器。我想将工作目录更改为Bash脚本所在的目录,以便可以对该目录中的文件进行操作,如下所示: $ ./application
4948 bash  directory 


19
如何判断Bash中是否不存在常规文件?
我使用以下脚本来查看文件是否存在: #!/bin/bash FILE=$1 if [ -f $FILE ]; then echo "File $FILE exists." else echo "File $FILE does not exist." fi 如果我只想检查文件是否不存在,使用的正确语法是什么? #!/bin/bash FILE=$1 if [ $FILE does not exist ]; then echo "File $FILE does not exist." fi
3260 bash  file-io  scripting 


26
如何检查字符串是否在Bash中包含子字符串
我在Bash中有一个字符串: string="My string" 如何测试它是否包含另一个字符串? if [ $string ?? 'foo' ]; then echo "It's there!" fi ??我不知道的运算符在哪里?我是否使用echo和grep? if echo "$string" | grep 'foo'; then echo "It's there!" fi 看起来有点笨拙。
2564 string  bash  shell  substring  sh 


17
在外壳中,“ 2>&1”是什么意思?
在Unix shell中,如果我想合并stderr并stdout放入stdout流中以进行进一步的操作,则可以在命令末尾附加以下内容: 2>&1 因此,如果要head在的输出上使用g++,可以执行以下操作: g++ lots_of_errors 2>&1 | head 因此我只能看到前几个错误。 我总是很难记住这一点,而且我经常不得不去查找它,这主要是因为我不完全理解这个特殊技巧的语法。 有人可以分解并逐字解释什么2>&1 意思吗?
2281 bash  shell  unix  redirect 


30
在Bash中提取文件名和扩展名
我想分别获取文件名(不带扩展名)和扩展名。 到目前为止,我发现的最佳解决方案是: NAME=`echo "$FILE" | cut -d'.' -f1` EXTENSION=`echo "$FILE" | cut -d'.' -f2` 这是错误的,因为如果文件名包含多个.字符,它将不起作用。假设我有a.b.js,它将考虑a和b.js,而不是a.b和js。 可以使用Python轻松完成 file, ext = os.path.splitext(path) 但如果可能的话,我不希望为此而启动Python解释器。 还有更好的主意吗?
2104 bash  string  filenames 

30
如何在Bash中的分隔符上拆分字符串?
我将此字符串存储在变量中: IN="bla@some.com;john@home.com" 现在我想用;定界符分割字符串,这样我就可以: ADDR1="bla@some.com" ADDR2="john@home.com" 我不一定需要 ADDR1和ADDR2变量。如果它们是数组的元素,那就更好了。 经过以下答案的建议后,我得出了以下结论: #!/usr/bin/env bash IN="bla@some.com;john@home.com" mails=$(echo $IN | tr ";" "\n") for addr in $mails do echo "> [$addr]" done 输出: > [bla@some.com] > [john@home.com] 解决方案涉及设置Internal_field_separator(IFS)为;。我不确定该答案发生了什么,如何重置IFS为默认值? RE:IFS解决方案,我尝试过了,而且可行,我保留了旧的IFS,然后将其还原: IN="bla@some.com;john@home.com" OIFS=$IFS IFS=';' mails2=$IN for x in $mails2 do echo "> [$x]" done IFS=$OIFS 顺便说一句,当我尝试 mails2=($IN) 循环打印时,我只有第一个字符串,但没有括号$IN可以使用。
2039 bash  shell  split  scripting 

30
如何在Bash中解析命令行参数?
说,我有一个脚本被此行调用: ./myscript -vfd ./foo/bar/someFile -o /fizz/someOtherFile 或这一个: ./myscript -v -f -d -o /fizz/someOtherFile ./foo/bar/someFile 什么是分析这使得在各种情况下的接受的方式(或两者的组合)$v,$f以及 $d将全部设置为true和$outFile将等于/fizz/someOtherFile?


14
如何在Bash中将变量设置为命令的输出?
我有一个非常简单的脚本,如下所示: #!/bin/bash VAR1="$1" MOREF='sudo run command against $VAR1 | grep name | cut -c7-' echo $MOREF 当我从命令行运行此脚本并将参数传递给它时,我没有得到任何输出。但是,当我运行包含在$MOREF变量中的命令时,我能够获得输出。 如何获取需要在脚本中运行的命令的结果,将其保存到变量,然后在屏幕上输出该变量?
1675 bash  shell  command-line 


30
如何递归计算目录中的所有代码行?
我们有一个PHP应用程序,并希望计算特定目录及其子目录下的所有代码行。我们不需要忽略评论,因为我们只是想获得一个大概的想法。 wc -l *.php 该命令在给定目录中效果很好,但是会忽略子目录。我以为这可能行得通,但返回74,绝对不是这种情况... find . -name '*.php' | wc -l 送入所有文件的正确语法是什么?
1620 bash  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.