Questions tagged «bash-scripting»

Bash脚本正在使用Bash Shell语言制作脚本。



2
当管道终止到子命令时,为什么bash while循环不退出?
为什么下面的命令不退出?循环不是无限运行,而不是退出。 尽管我使用更复杂的设置发现了此行为,但命令的最简单形式简化为以下形式。 不退出: while /usr/bin/true ; do echo "ok" | cat ; done | exit 1 上面没有错别字。每个“ |” 是管道。“出口1”代表另一个已运行并已退出的过程。 我期望“退出1”会在while循环上导致SIGPIPE(在没有读取器的管道上进行写操作),并使循环中断。但是,循环继续运行。 为什么命令不停止?


1
与Google Chrome的自动交互
SU,好的,我有一个好玩的螺母要破解。 我在一行中设置了8个屏幕,所有屏幕都连接到运行Snow Leopard的功能强大的G5(是的,有4个图形卡;大约15,000像素!)。我正在设置一个演示,该演示使用全屏显示的8个Chrome浏览器窗口,每个窗口指向一个不同的URL。每次重新启动计算机时,手动执行此操作都很麻烦。 有了这个设置,我想编写一个脚本来自动: 打开Chrome窗口至特定屏幕 将该窗口指向特定的URL 全屏显示该窗口(命令-F是键盘快捷键) 我没有使用过automator,并且对shell脚本并不特别熟悉,但是我想知道人群中是否有任何花哨的建议。 更新:即使我需要将Automator用于高级功能,我最终还是希望找到一种从命令行/脚本触发脚本的方法。我希望能够根据需要从Shell远程打开此演示。

4
使用“源”运行脚本时如何正确还原设置?
我正在编写一个脚本,该脚本需要使用来执行source,因为它的任务是修改环境。在脚本执行过程中,我要使用脚本,set -e以便任何错误都可以停止脚本。该脚本如下所示: #!/bin/bash set -e # do something cd somewhere source anotherScript 问题在于set -e脚本完成后自然仍然有效。set在脚本停止时(以任何方式-通过成功完成或发生错误),如何确保更改后的选项正确恢复到其上一个值?

2
如何获取脚本生成的所有子进程的列表
内容: 用户向我提供其自定义脚本来运行。这些脚本可以是各种脚本,例如用于启动多个GUI程序,后端服务的脚本。我无法控制脚本的编写方式。这些脚本可以是阻塞类型,即执行等待直到所有子进程(顺序运行的程序)退出 #exaple of blocking script echo "START" first_program second_program echo "DONE" 或非阻塞类型,即在后台派生子进程并退出类似 #example of non-blocking script echo "START" first_program & second_program & echo "DONE" 我想达到什么目的? 用户提供的脚本可以是以上两种类型中的任何一种,也可以是两者的组合。我的工作是运行脚本,并等待脚本启动的所有进程退出,然后关闭该节点。如果是阻塞类型,则情况很简单,即获取脚本执行过程的PID,然后等到ps -ef | grep -ef PID不再有条目。非阻塞脚本是给我带来麻烦的脚本 有没有一种方法可以获取通过执行脚本生成的所有子进程的PID列表?任何指针或提示将不胜感激

1
如何使sed省略不匹配的行?
在以下示例中,sed匹配以a a或a 开头的行,c并打印该行的第一个字符(a或c): $ echo "ag bh ci dj ek fl" | sed 's/\(a\|c\)./\1/' # Matches lines starting with 'a' or 'c'. output: a bh c dj ek fl 但是,与图案不匹配的线也会被打印出来。我该如何sed忽略与模式不匹配的行?我可以通过将其与grep(如下所示)组合来获得所需的效果,但是我想知道是否sed可以“单独”实现该效果。 $ echo "ag bh ci dj ek fl" | grep '[ac]' | sed 's/\(a\|c\)./\1/' output: a c

3
我将使用哪些命令来顺序创建两个子进程?
我想生成两个子进程,但是要等到第一个子进程在执行中达到某个点(可以通过检查stdout来确定)之后再生成第二个子进程。我不确定要完成此操作需要使用哪些unix命令,并且由于unix命令名的简洁性和有时是隐秘的性质,因此很难通过Google查找任何内容。 我不是要寻求解决的特定问题的解决方案(尽管任何其他指针都会受到欢迎),我主要关心的是知道我想查找并学习使用哪些unix命令。

3
为什么某些命令不采用输入重定向?
例如,echo: [aesteban@localhost ~]$ cat tmp.txt Angel [aesteban@localhost ~]$ echo < tmp.txt [aesteban@localhost ~]$ 如您所见,输出只是空白行。根据我的阅读,某些命令能够进行输入重定向,例如mail: [aesteban@localhost ~]$ mail barney@example.com < tmp.txt 那么,输入重定向是否仅适用于交互式命令(能够等待输入的命令)?如何确定命令是否是交互式的(除了尝试)?

1
删除1个月以前的文件,但每月保留一个文件
我尝试编写类似的东西 删除1个月以前的文件,但保留在该月的第1天创建的文件 。 不同之处在于我每月需要一个文件。 我正在使用我的构建环境的脚本,这不是每天由scm轮询引起的。 我认为实现它的唯一方法是使用find来获取所有“旧”文件并对其执行一些检查。 首先,我将删除列表中的所有文件,这些文件已保存为月份文件。然后我会从列表中删除一个文件作为月份文件,之后我会删除列表中的所有文件。 我错过了查找或类似的功能吗?



1
linux find:搜索小于2Kb的文件会丢失1到2Kb之间的文件
我只是偶然发现Linux上的find命令,简而言之,我需要在某个文件夹中查找所有小于2Kb的文件,因此发出了以下命令: find /folder_to_search_into/ -type f -size -2k 根据查找的手册页应该返回小于2 KB的所有内容 但是我注意到的是,它丢失了一些文件,大小在1到2Kb之间。 然后我发出 find /folder_to_search_into/ -type f -size -2048c 由于“ c”代表字节,因此它应该完全等效,在这种情况下,它找到了我正在寻找的所有文件。 任何想法,为什么这种行为?我可能在这里找不到明显的地方。不知道它是否与此注释有关(从“查找手册”页面-在“尺寸”部分中): 该大小不计入间接块,但计入未实际分配的稀疏文件中的块。请记住,-printf的'%k'和'%b'格式说明符对稀疏文件的处理方式不同。后缀“ b”始终表示512字节的块,从不表示1千字节的块,这与-ls的行为不同。

1
如何避免终端向下滚动到bash中的最后一条消息?
我编写了一个bash脚本,在新终端中运行一些其他命令: #!/bin/bash # Sample script gnome-terminal --title="blah blah" -x bash -c ffmpeg -i udp://239.1.2.1:60001?fifo_size=50000000 -acodec copy -vcodec copy -preset ultrafast \ -flags -global_header -f hls -hls_time 20 -hls_wrap 5 /var/www/html/ts/1.m3u8 & sleep 1 gnome-terminal --title="blah blah" -x bash -c ffmpeg -i udp://239.1.2.2:60002?fifo_size=50000000 -acodec copy -vcodec copy -preset ultrafast \ -flags …

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.