Articles of shell

在不使用grep -w的情况下在QNX中查找完全匹配

我正在编写一个脚本,需要在与QNX和POSIX兼容的Linux兼容的文件中find完全匹配的脚本 更多详情: 我试图find一个进程的用户,所以我写的原始命令是 user=$(ps -aux | awk '{print $1 " " $2}' | grep -w ${process} | awk '{}print $1') 这在POSIX兼容的Linux中是完美的 然而,QNX并不完全符合POSIX标准, grep -w对于我的目标是不可用的…所以我需要find一个完全匹配而不需要grep -w

在Linux上的shell脚本中设置一个活动的工作区

我有一个shell脚本,其唯一目的是启动一个确定性的代码。 运行时,最近打开了一些非交互式的terminal,这可能是一个痛苦。 我正在使用几个不同的工作空间在Linux CentOS上工作。 因此,我想让shell脚本将其中一个工作空间视为“活动工作空间”,而不是我正在使用的工作空间; 那么非交互式terminal将在这个其他工作区中打开。 我已经看过“wmctrl -s”,但它必须切换我当前所在的工作区。 有任何想法吗 ? 谢谢 !

如果父进程退出,则挂起subprocess退出

我有以下过程树 test1.sh \- test2.sh \- sleep 600 通常如果我杀了test1.sh进程,subprocesstest2.sh和sleep 600将继续运行。 但是,如果我通过发送信号(SIGSTOP或SIGTSTP)暂停睡眠600进程,然后杀死test1.sh进程,则test2.sh和sleep 600将退出。 为什么? 这是我的testing程序: test1.sh #!/bin/sh ./test2.sh test2.sh #!/bin/sh sleep 600 testing步骤: 运行test1.sh $ ./test1.sh 打开新的控制台并暂停subprocess。 $ kill -19 <sleep pid>或杀死-20 <sleep pid> 杀死父进程test1.sh $ kill <test1.sh pid> 你会发现步骤3之后,test2.sh和sleep 600退出。 错误,如果我只运行step1和step3,忽略step2,test2.sh和睡眠600进程将不会退出。 任何人都可以解释吗? 非常感谢。

在linux中是主动等待常见的

我正和一位同事辩论,如果你在Linux下主动等待,那么这是不好的编程。 他比bash脚本更有经验,并且说这是很常见的做法。 例如,我们尝试在插入WiFi USB后启动bash脚本。 如果有人在这里,他会每分钟仰望。 我将采取USB事件,当它是WiFi,启动我的脚本与该设备。 请帮助我们解决这个问题。

在花括号中parsing块

我试图parsing一个dhcpd.conf文件,看起来像这样: authoritative; subnet xxxx netmask xxxx { range xxxx xxxx; deny unknown-clients; default-lease-time 86400; max-lease-time 86400; option domain-name "bla"; option domain-name-servers xxxx; option broadcast-address xxxx; option subnet-mask xxxx; option routers xxxx; host host1 { hardware ethernet 00:e1:4c:68:00:53; fixed-address 1.1.1.1; } host host2 { hardware ethernet 01:e2:4d:69:01:54; fixed-address 2.2.2.2; } host host3 { hardware ethernet 02:e3:4e:70:02:55; […]

从Bash脚本启动Bash脚本来启动GUI应用程序

我正试图在Ubuntu上启动一个GUI应用程序(rhythmbox)。 在下面我尝试解释执行文件的链。 # Window manager executes first ~/i3wm_cmd_wrapper.sh Window_Name ~/mount_enc.sh 这个包装器使用gnome-terminal来执行。 这使得在用户可以input信息的启动时打开terminal。 # mount_enc.sh launches the following command in the end bash ~/launch_in_bg.sh rhythmbox mount_enc.sh完成从普通terminal启动时应该执行的操作。 但是我想在启动时自动启动它,并且在脚本完成之后应该保持打开rhythmbox。 # launch_in_bg.sh is just doing what it's supposed to ($PRGRM > /dev/null 2>&1) & 我无法让gnometerminal为我打开rhythmbox。 另外,我认为我的方法是错误的,如果我想在gnometerminal执行mount_enc.sh脚本后继续运行rhythmbox。 任何人都可以想出更好的解决scheme吗?

我怎样才能redirecttail -f输出curl(HTTPstream)

我想从embedded式设备收集实时日志。 该设备具有有限的命令。 如果我可以通过shell脚本来完成这将是非常好的。 那么,我可以做一些像tail -f /var/logs/some-log.log | curl -X POST –data-urlencode @- http://<log-collaction.website>这样的东西 tail -f /var/logs/some-log.log | curl -X POST –data-urlencode @- http://<log-collaction.website> ? 我尝试了很多方法,但都失败了。 例如: ping www.google.com | while read -r LINE; do curl -X POST –silent –data-binary $LINE "http://localhost:8080/"; done 上述命令可以工作,但是会逐行发送消息。 不过,如果我有很多内容需要发送,我觉得performance不好。 我知道HTTP / 1.1支持分块编码。 我如何redirect程序的stdout curl或HTTPstream(也许长连接?)。 谢谢

将一个函数命名为环境命令

我想知道是否有办法创build一个脚本如下: #!/bin/ksh export() { echo "We're in the local function" } export 主要的问题是export是一个设置variables或环境variables值的环境命令,所以当这个脚本运行时,它只会提示如下: LOGIN=autosys LOGNAME=autosys MAIL=/usr/spool/mail/autosys PWD=/home/autosys/wlp SHELL=/usr/bin/ksh TZ=Europe/Paris HOME=/home/autosys … 很明显,我可以用不同的名称命名我的函数,但我很好奇(因为这个函数应该被命名为export,逻辑目的),我不知道是否有一种方法让脚本知道我想运行本地导出( )function而不是环境命令。 比如类似的东西 export(){…} call function(export)

将jps -vl命令的输出分配给shell脚本中的variables

我需要将一个命令的输出分配给一个variables。 我试过的命令是: #!/bin/bash JAVA_PROCESSES=`jps -vl | grep -v 'sun.tools.jps.Jps' | grep -v 'hudson.remoting.jnlp.Main' | grep -v grep` NUMBER_OF_JAVA_PROCESSES=`echo $JAVA_PROCESSES | wc -l` echo $NUMBER_OF_JAVA_PROCESSES echo $JAVA_PROCESSES .. 当我在上面尝试时,所有java进程grepped被分配到一行中的JAVA_PROCESSESvariables。 进程不会被换行。 因此$ NUMBER_OF_JAVA_PROCESSES总是给我1。 另外$ NUMBER_OF_JAVA_PROCESSES显示1,即使没有进程被分配给JAVA_PROCESSES,因为$ JAVA_PROCESSES中的空行。 请build议一种分配由新行分隔的grepped进程的方法。

如何在多个文件中删除具有2个时间段的所有行

我有大约300个文本文件,每个文件都包含一个域列表。 我试图删除所有的领域,其中有2个时期。 例如,这里有一个列表: example.com stackoverflow.com google.co.uk testing.com another.something.whatever google.com 那个清单应该成为这样的: example.com stackoverflow.com testing.com google.com 域名google.co.uk和another.something.whatever应该被删除,因为它们包含多个句点。 我知道我可以像所有这些线grep: grep "\..*\." *.txt 我无法find任何关于在多个文件中删除具有多个符号的行的问题。 如果我错过了,这是重复的,请让我知道。