我偶然发现了的答案,在玩grep的时候,我注意到了一个奇怪的问题。下面的代码和我预期的一样:
$ while [ 1 ]; do sleep 1 ; echo tick; done | tee >(grep -o ti) >(grep -o ic) >(grep tick) >/dev/null
ic
ti
tick
ic
tick
ti
^C
所有三个grep命令都应用于循环的输出。
但是,如果我将tee的输出通过管道传输到grep (而不是将其重定向到/dev/null),则文件上的grep将停止工作:
$ while [ 1 ]; do sleep 1 ; ech
我正在编写处理文件的shell脚本。我需要找到文件,用一些重要的信息打印出来。那没问题..。但是,我想添加一些“特性”,并使其与参数一起工作。其中一个特性是忽略一些与patterm匹配的文件(比如*.c -忽略所有c文件)。所以我设置了变量,并在其中添加了字符串。
#!/bin/sh
command="grep -Ev \"$2\"" # in 2nd argument is pattern, that will be ignored
echo "find $PWD -type f | $command | wc -l" # printing c
我写了下一个剧本:
process="$1"
if [ -z "$1" ]; then
echo "Please specify a process to check"
exit 1
fi
ps -ef | grep "$process" | grep -v {grep\|$(basename $0)} > /tmp/procs
if [ "$?" -eq "0" ]; then
stat="OK"
exitco
我做了一个简单的脚本,它检查服务是否正在运行并返回一个退出代码,但我无法使它工作。如果工作正常,退出0,如果不工作,退出1。
#!/bin/bash
#Plugin for checking if the SSH service is running
SERVICE='ssh'
if [ ps aux | grep -v grep | grep $SERVICE > /dev/null ];
then
exit 0
else
exit 1
fi
在bash中,我创建了一个简单的守护进程,以便在internet连接更改时执行命令:
#!/bin/bash
doService(){
while
do
checkTheInternetConnection
sleep 15
done
}
checkTheInternetConnection(){
if unchanged since last check
return
else
execute someCommand
fi
}
someCommand(){
do somethin
我正在努力传递一个shell命令。具体地说,我编写了一个用户将运行的shell文件。在其中,另一个shell文件是根据用户输入编写的。然后,该文件将被传递给提交作业的命令。
现在,在这个内部shell文件中,我有一个包含函数的变量。但是,当我运行用户shell脚本时,我无法让此函数以内部shell文件可以使用的方式传递。
我不能分享我的工作,但我会试着做一个例子
#User shell script
cat >test.txt <<EOF
#a bunch of lines that are not relevant
var=`grep examples input.txt`
显然,我做了一些事情,改变了grep在我的Ubuntu16.04机器上的运行方式。不管我输入了什么,它都会返回“没有这样的文件或目录”,或者类似的内容。
例如,如果我创建一个文件,然后尝试使用grep搜索它,它就不能工作。输入以下两个命令会产生错误。
$ echo 'dog eat dog' > dog
$ grep 'd' dog
grep: d: No such file or directory
也许我做了什么事情,所以grep找错地方了?