Questions tagged «bash»

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


4
将JSON数组中的一个字段解析为bash数组
我有一个JSON输出,其中包含存储在变量中的对象列表。(我可能没有这样说的权利) [ { "item1": "value1", "item2": "value2", "sub items": [ { "subitem": "subvalue" } ] }, { "item1": "value1_2", "item2": "value2_2", "sub items_2": [ { "subitem_2": "subvalue_2" } ] } ] 我需要数组中的item2的所有值,以便bash脚本在ubuntu 14.04.1。上运行。 我发现了很多方法可以将整个结果放入数组,而不仅仅是我需要的项目

5
我怎么能sudo su并立即更改目录?
我想创建一个执行以下操作的别名: alias userYYY='sudo su userYYY; cd /a/path/that/only/userYYY/has/access' 因此,然后从我的命令行,我登录与须藤用户,我想输入别名userYYY让我的壳现在登录同userYYY和pwd是/a/path/that/only/userYYY/has/access。 我怎样才能做到这一点?这userYYY是用于运行某些进程的,它的主目录中必须有任何东西。因此,我尝试使用以下方法更改其$ HOME: sudo usermod -m -d /a/path/that/only/userYYY/has/access userYYY 然后从我的sudoer文件的外壳中执行操作sudo su userYYY。但这没有用。唯一有效的方法是,sudo su -l userYYYY但是在我的原始shell(-bash-4.1$ ....)中打开了一个新bash 。 总而言之,我要避免在shell中写两行代码: sudo su userYYY cd /a/path/that/only/userYYY/has/access 有任何想法吗?
13 bash  shell  sudo  su 

4
查找:修剪不忽略指定的路径
我需要.git从find搜索中排除。为此,我使用了-path ./.git -prune开关: $ find . -path ./.git -prune -o \( -type f -o -type l -o -type d \) | grep '.git' ./.git 但是,即使这跳过了.git目录的内容,它也会列出目录本身。当我添加时它起作用-path ./.git -prune -o -print -a find . -path ./.git -prune -o -print -a \( -type f -o -type l -o -type d \) | grep …
13 bash  find 

2
如何仅重定向stderr?
我这样做有点麻烦。我需要运行已编译的.java文件,并且仅将stderr重定向到名为error的文件。因此.java文件名为javaProgram.java。 这是我尝试过的: java javaProgram 2> error 但是当我 cat error 似乎里面有东西,即使我知道特定的.java文件没有错误的事实。难道我做错了什么?我只想显示该错误文件,而不是其他任何错误。

3
如何将bash样式的数组移植到ash?
前段时间,我编写了一个bash脚本,现在该脚本应该可以在带有的环境中运行ash。 在bash它就像: services=( "service1.service" "service2.service" "service3.service" ) for service in "${services[@]}" do START $service done START() { echo "Starting "$1 systemctl start $1 } 实际上,有大约40种服务在阵列中,我想使这种过渡尽可能轻松,整洁。一直在使用bashisms。现在,我正忙于使脚本更具可移植性的任务。 出于可移植性的原因,最好有一个纯粹的ash解决方案。但是,由于我拥有足够强大的能力busybox,因此我可能会牺牲一些可移植性。只有在可读性得到很大提高的情况下,因为“干净”脚本也是一个度量标准。 什么是便携式和清洁在这种情况下的解决方案?
13 bash  shell  array  ash 

4
等待某些过程完成时显示Spinner
如何显示微调框,直到命令行完成工作?换句话说,如果我正在运行脚本,并且想在此脚本运行时显示微调器,并且在脚本完成后微调器消失。 波纹管是常见的微调器代码: i=1 sp="/-\|" echo -n ' ' while true do printf "\b${sp:i++%${#sp}:1}" done 如何将先前的微调器代码链接到命令,以使其在命令运行时显示微调器,并且在命令完成工作后微调器消失?如果将命令包含在循环中,它将与微调器一起循环,那么这种情况下的解决方案是什么?
13 bash 


2
如何在多个文件上运行命令
这是非常基本的操作,我有一个文件夹,其中包含JS文件的几个子文件夹,并且我想在这些文件夹中的所有文件上运行Google的Clojure编译器。处理单个文件的命令如下: java -jar compiler.jar --js filename.js --js_output_file newfilename.js 如何修改它以在目录结构中的每个JS文件上运行?

4
Bash脚本等待进程并获取返回码
我正在尝试创建一个脚本,它将启动许多后台命令。对于每个后台命令,我需要获取返回码。 我一直在尝试以下脚本: #!/bin/bash set -x pid=() return=() for i in 1 2 do echo start $i ssh mysql "/root/test$i.sh" & pid[$i]=$! done for i in ${#pid[@]} do echo ${pid[$i]} wait ${pid[$i]} return[$i]=$? if [ ${return[$i]} -ne 0 ] then echo mail error fi done echo ${return[1]} echo ${return[2]} 我的问题是在等待循环中,如果第二个pid在第一个pid之前完成,我将无法获得返回代码。 我知道我可以运行wait …
13 linux  bash  process  array 


7
bash遍历字符串列表
是否可以格式化此样本: for i in string1 string2 stringN do echo $i done 类似于以下内容: for i in string1 string2 stringN do echo $i done 编辑:对不起,混乱,并没有意识到,有执行脚本的不同方法-上海<scriptname>与bash <scriptname>和也这件事情,我现在不能名字- #!/bin/sh和#!/bin/bash:)

2
如何获取子外壳的PID?
如何获取子外壳的PID? 例如: $ echo $$ 16808 这不起作用,因为原始外壳扩展了$$: $ ( echo $$ ) 16808 为什么单引号不起作用?在原始外壳删除单引号之后,子外壳$$本身不会扩展吗? $ ( echo '$$' ) $$ 为什么也eval不起作用?是eval由subshel​​l运行的吗?为什么给我原始外壳的PID? $ ( eval echo '$$' ) 16808 谢谢。
13 bash  process  subshell 

2
如何在shell中四舍五入浮点数?
如何在命令行上正确舍入IEEE 754浮点数? 我想指定输出数字的精度-小数位数。 例如,舍入6.66到精度1应给出6.7。下表中的更多内容: Value Precision Rounded 6.66 0 7 6.66 1 6.7 6.66 2 6.66 6.66 3 6.660 6.666 3 6.666 6.6666 3 6.667 它应该可以在交互式Shell中使用,但理想情况下要足够健壮,以便在生产Shell脚本中使用它。

2
bash脚本中的正则表达式
这是我第一次使用bash脚本,所以我很容易犯一个错误。 基本上,我正在尝试编写一个获取用户组的脚本,如果它们在某个组中,它将相应地进行记录。显然会有更多功能,但是当我什至无法使正则表达式正常工作时,毫无意义! 到目前为止,我有这个: #!/bin/bash regex="^([a-zA-Z0-9\-_]+ : [a-zA-Z0-9\-_]+) (usergroup)$" # example output groups="username : username usergroup" echo "$groups" >> /home/jrdn/log if [[ "$groups" =~ $regex ]]; then echo "Match!" >> /home/jrdn/log else echo "No match" >> /home/jrdn/log fi 我尝试过该正则表达式的每个地方都可以使用。但是在bash脚本中,它只输出$groups,然后输出No match。那么有人可以告诉我这是怎么回事吗?

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.