Questions tagged «bash»

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

4
Ctrl-C如何终止子进程?
我试图了解CTRL+如何C终止子进程而不终止父进程。我在某些脚本外壳中看到了这种行为,例如bash可以在其中启动一些长时间运行的进程,然后通过输入CTRL-终止它,然后C控件返回到外壳。 您能解释一下它是如何工作的,尤其是为什么父(shell)进程不会终止? 外壳程序是否必须对CTRL+C事件做一些特殊处理,如果是,它到底是做什么的?
69 bash  shell  process  sh 

3
如何在Bash中以另一个用户的身份执行一组命令?
这里已经存在一些有关以其他用户身份运行命令的现有问题。但是,问题和答案只针对单个命令,而不是一长串命令。 例如,考虑以下脚本: #!/bin/bash set -e root_command -p param1 # run as root # these commands must be run as another user command1 -p 'parameter with "quotes" inline' command2 -p 'parameter with "quotes" inline' command3 -p 'parameter with "quotes" inline' 这里有几点要注意的要点: 最后三个命令必须使用su或作为其他用户运行sudo。在该示例中,有三个命令,但假设还有更多命令... 命令本身使用单引号和双引号。 上面的第二点禁止使用以下语法: su somebody -c "command" ...因为命令本身包含引号。 将命令“分组”并在另一个用户帐户下运行它们的正确方法是什么?
69 bash  su 

4
使用cut命令删除多列
给定输入 回声1,2,3,4,5,6,7,8,9,... 100 如果我想减少第5列,我可以做 切-d,-f-4,6- 如果我想切割多个不连续的列(如5、7等)怎么办?
69 bash  cut 


3
将制表符分隔的文件行读入数组
我想逐行将文件读入脚本。文件中的每一行都是由一个制表符分隔的多个值,我想将每一行读入一个数组。 典型的bash“逐行读取文件”示例; while read line do echo $line; done < "myfile" 但是对我来说,myfile看起来像这样(制表符分隔的值); value1 value2 value3 value4 value5 value6 在循环的每次迭代中,我希望每行都进入一个数组,以便我可以 while read line into myArray do echo myArray[0] echo myArray[1] echo myArray[2] done < "myfile" 这将在第一次循环迭代中打印以下内容; value1 value2 value3 然后在第二次迭代中它将打印 value4 value5 value6 这可能吗?我能看到的唯一方法是编写一个小的函数来手动分解值,为此bash中是否内置支持?
69 arrays  bash 

2
即使我暂停第一个命令(Ctrl-z),也要依次运行一个命令
我知道在bash中我可以通过用分号将它们分开来依次运行一个命令,例如 $ command1; command2 或者,如果我只想command2在command1成功的情况下运行,请使用&&: $ command1 && command2 这可以工作,但是如果我暂停command1使用Ctrl-z,则在第一种情况下,它将command2立即运行,而在第二种情况下,它根本不会运行。如何依次运行命令,但仍然能够挂起第一个命令,但是直到我重新启动它(使用fg)并完成后才能再次运行第二个命令?我希望输入的内容尽可能简单,因为我希望以交互方式进行输入。或者也许我只需要在某个地方设置一个选项。 顺便说一句,什么是正确的术语Ctrl-z?


7
使用命令的结果作为bash中的参数?
要为文件夹中的所有音乐创建播放列表,我在bash中使用以下命令: ls > list.txt 我想使用pwd命令的结果作为播放列表的名称。 就像是: ls > ${pwd}.txt 但这不起作用-谁能告诉我我需要使用什么语法来执行类似的操作? 编辑:如评论中所述,pwd将最终给出绝对路径,因此我的播放列表将最终在某些目录中被命名为.txt-d'哦!所以我必须修剪路径。感谢您发现-我可能花了很长时间才想知道我的文件在哪里!

3
案例陈述失败了吗?
在流行的命令式语言中,一旦case语句已匹配,switch语句通常会“跳入”下一个级别。 例: int a = 2; switch(a) { case 1: print "quick "; case 2: print "brown "; case 3: print "fox "; break; case 4: print "jumped "; } 会打印“棕狐”。 但是bash中的相同代码 A=2 case $A in 2) echo "QUICK" ;& 2) echo "BROWN" ;& 3) echo "FOX" ;& 4) echo …
68 bash 

6
递归使用scp,但不包括某些文件夹
假设有一些具有这些结构的文件夹 /bench1/1cpu/p_0/image/ /bench1/1cpu/p_0/fl_1/ /bench1/1cpu/p_0/fl_1/ /bench1/1cpu/p_0/fl_1/ /bench1/1cpu/p_0/fl_1/ /bench1/1cpu/p_1/image/ /bench1/1cpu/p_1/fl_1/ /bench1/1cpu/p_1/fl_1/ /bench1/1cpu/p_1/fl_1/ /bench1/1cpu/p_1/fl_1/ /bench1/2cpu/p_0/image/ /bench1/2cpu/p_0/fl_1/ /bench1/2cpu/p_0/fl_1/ /bench1/2cpu/p_0/fl_1/ /bench1/2cpu/p_0/fl_1/ /bench1/2cpu/p_1/image/ /bench1/2cpu/p_1/fl_1/ /bench1/2cpu/p_1/fl_1/ /bench1/2cpu/p_1/fl_1/ /bench1/2cpu/p_1/fl_1/ .... 我想做的是scp以下文件夹 /bench1/1cpu/p_0/image/ /bench1/1cpu/p_1/image/ /bench1/2cpu/p_0/image/ /bench1/2cpu/p_1/image/ 如您所见,我要递归使用,scp但要排除所有名为“ fl_X”的文件夹。看来scp没有这样的选择。 UPDATE scp没有这种功能。相反,我使用以下命令 rsync -av --exclude 'fl_*' user@server:/my/dir 但这是行不通的。它只传输文件夹列表!就像是ls -R
68 bash  scp 

2
bash中的fork和exec
如何在bash中实现fork和exec? 让我们假设脚本为 echo "Script starts" function_to_fork(){ sleep 5 echo "Hello" } echo "Script ends" 基本上,我希望该函数像在C语言中那样被称为新进程,我们使用fork和exec调用。 在脚本中,预期父脚本将结束,然后在5秒钟后打印“ Hello”。
68 linux  bash  scripting  shell 


10
通过在Bash脚本中使用ping检查主机可用性
我想编写一个脚本,该脚本将不断检查网络中应该整天处于联机状态的设备是否真正处于联机状态。我尝试使用ping,但是 if [ "`ping -c 1 some_ip_here`" ] then echo 1 else echo 0 fi 给人1不管我输入有效或无效的IP地址。我如何检查特定地址(或更好的IP地址列表中的任何设备)是否离线?

8
如何为bash脚本制作GUI?[关闭]
从目前的情况来看,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我想为脚本创建一些图形对话框,但不知道如何。我听到一些关于GTK-Server的信息。如果有人知道如何将Bash与tcl / tk链接,我也会感到满意。 请不要发布诸如“更改为C ++”之类的内容,因为我的项目必须是Bash中的脚本。没有其他选择。 有任何想法吗? 编辑: 感谢您的回答,但我不希望控制台中的颜色为“图形”,而是可以移动,最小化等的图形窗口。我将进行测试xmessage,但我认为这不是我要搜索的内容。 编辑2: 我不想做一个简单的对话框,如是/否,但某些界面,如进度栏和按钮,像游戏。
68 user-interface  bash  gtk  tcl  tk 

10
关联数组:错误“声明:-A:无效选项”
我已经编写了一个在bash(v 4)中使用关联数组的脚本。 在使用的本机上,它运作良好4.1.5(1)-release。 在生产机器上,使用4.1.0(1)-release以下行声明assoc数组会失败: declare -A uniqjars 消息: /script.sh: line 11: declare: -A: invalid option declare: usage: declare [-afFirtx] [-p] [name[=value] ...] 我印象中这是bash 4的一般功能? 在生产机器上使用bash的人中,它讨论了使用方法,-A因此我认为它应该可以工作。 关联数组是使用创建的 。declare -A name 我可以通过打印出值来确认脚本使用的是正确的bash版本。 echo 'bash -version。 我可能做错了什么?

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.