Questions tagged «shell-script»

有关shell脚本,由shell解释的可执行文件(bash,zsh等)的问题。

1
在此Dockerfile入口点中,“ set-”有什么作用?
我想了解这个Docker入口点的作用。 在我看来,这是编写Dockerfile时非常常见的模式,但是我的bash技能有限,我不知道所有特殊的bash符号功夫。 另外,很难用Google搜索“-”,“ $!”。等等。在bash世界中这些叫做什么? 总而言之,波纹管试图做什么? if [ "${1#-}" != "$1" ]; then set -- haproxy "$@" fi
41 shell-script  set 


5
用实际值替换文件中的环境变量?
有没有一种简单的方法可以替换/评估文件中的环境变量?假设我有一个config.xml包含以下内容的文件: <property> <name>instanceId</name> <value>$INSTANCE_ID</value> </property> <property> <name>rootPath</name> <value>/services/$SERVICE_NAME</value> </property> ...等等。我想$INSTANCE_ID用INSTANCE_ID环境变量$SERVICE_NAME的值和SERVICE_NAMEenv var 的值替换文件。我不会事先知道需要哪个环境变量(或者,如果有人将新的环境变量添加到配置文件中,我不想更新脚本)。谢谢!


3
测试字符串是否包含子字符串
我有代码 file="JetConst_reco_allconst_4j2t.png" if [[ $file == *_gen_* ]]; then echo "True" else echo "False" fi 我测试是否file包含“ gen”。输出为“ False”。真好! 问题是当我用变量替换“ gen”时testseq: file="JetConst_reco_allconst_4j2t.png" testseq="gen" if [[ $file == *_$testseq_* ]]; then echo "True" else echo "False" fi 现在输出为“ True”。怎么会这样?如何解决问题?

4
nvm命令在bash脚本中不可用
我正在尝试构建一个脚本,nvm并最终在其中安装节点。 我已经安装nvm了cURL。我在.profile或.bashrc文件中看到了修改(都可以使用),并且nvm在bash提示符下键入时,它显示了可用的选项等。 因此nvm可以使用。我可以手动安装节点,但是只要将nvm命令放入shell脚本中: nano test.sh #!/bin/bash nvm 并运行: chmod 755 test.sh ./test.sh 我得到: ./test.sh: line 2: nvm: command not found 如果找不到nvm,我什至不必想 nvm ls-remote 要么 nvm install ... 我安装了Ubuntu 14.04,Bash是我的shell。

2
将bash参数连接到带空格的单个字符串中
我正在尝试将Bash函数的所有参数连接到一个字符串中,每个参数之间用空格隔开。我还需要使字符串在整个字符串周围包含单引号。 这是我到目前为止所拥有的... $array=("$@") str="\'" for arg in "${array[@]}"; do let $str=$str+$arg+" " done let $str=$str+"\'" 显然这是行不通的,但是我想知道是否有办法实现这一目标?

2
awk'!a [$ 0] ++'如何工作?
这种单行代码无需预先排序即可从文本输入中删除重复的行。 例如: $ cat >f q w e w r $ awk '!a[$0]++' <f q w e r $ 我在互联网上找到的原始代码为: awk '!_[$0]++' 这让我更加困惑,因为我_在awk中有特殊的含义,就像在Perl中一样,但事实证明,这只是数组的名称。 现在,我了解了单线背后的逻辑: 每条输入行都用作哈希数组中的键,因此,完成后,哈希按到达顺序包含唯一的行。 我想学习的是awk如何准确地解释此表示法。例如,爆炸符号(!)的含义以及此代码段的其他元素。 它是如何工作的?

1
GNU parallel vs&(我的意思是背景)vs xargs -P
我对.sh使用脚本在脚本中运行一组任务的区别或优势(如果有)感到困惑GNU parallel 例如,Ole Tange的答案: parallel ./pngout -s0 {} R{} ::: *.png 而不是说遍历它们将它们置于背景中&。 例如弗罗斯特斯的答案: #copied from the link for illustration for stuff in things do ( something with stuff ) & done wait # for all the something with stuff 简而言之,它们只是在语法上还是实际上在不同?如果实际上不同,我什么时候应该使用它们?

3
每个基于Linux的发行版中可用哪些标准命令?
我想知道每个Linux系统中可用的标准命令。 例如,如果您获得了debian / ubuntu / redhat / suse / arch / slackware等,您将始终在其中找到以下命令: cd,mkdir,ls,echo,grep,sed,awk,ping等 我知道所提到的某些命令是shell内置的,而其他命令却不是,但是它们仍然始终存在(根据我到目前为止的知识和经验)。 另一方面,默认情况下,诸如gawk,parted,traceroute和其他非常著名的命令之类的命令不会安装在不同的Linux发行版中。 我进行了不同的网络搜索,但没有找到直接的答案。 目的是我要创建一个shell脚本,并且应该对系统中是否可用该脚本中使用的命令进行一些检查。如果没有,它将提示用户安装所需的二进制文件。

2
为什么使用&&比if ... fi快75倍,以及如何使代码更清晰
我有以下工作代码: largest_prime=1 for number_under_test in {1..100} do is_prime=true factors='' for ((divider = 2; divider < number_under_test-1; divider++)); do remainder=$(($number_under_test % $divider)) [ $remainder == 0 ] && [ is_prime ] && is_prime=false && factors+=$divider' ' done [ $is_prime == true ] && echo "${number_under_test} is prime!" || echo "${number_under_test} is …



4
使用命令行注释/取消注释某些行的最简单方法
有没有一种方法可以使用命令行注释/取消注释shell / config / ruby​​脚本? 例如: $ comment 14-18 bla.conf $ uncomment 14-18 bla.conf 这将添加或删除#的标志bla.conf线14来18。通常我使用sed,但是我必须知道这些行的内容,然后执行查找替换操作,并且当一根以上的针头时,这将产生错误的结果(而我们只想替换第N个针一)。

3
chmod +静默模式+尽管有错误,如何强制退出代码0
是否可以执行chmod并忽略命令中的错误 示例(不存在备注file.txt来显示示例) 当我打字 chmod 777 file.txt 我在输出中收到错误 chmod: cannot access file.txt : no such file or directory 因此,我将-f标志添加到命令中,如下所示:(为了显示这种情况,file.txt不存在) chmod -f 777 file.txt echo $? 1 但是从示例chmod返回1 请提供错误信息,建议如何强制chmod命令给出退出代码0

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.