我刚刚开始学习 bash。我有以下脚本,我想知道以下命令的作用,以便开始了解这个世界。
if [ ! -w "." ]
then
echo "You need write permission in the directory"
exit 1
fi
firefoxGeditOpen=ps -d | grep -ic -e firefox -e gedit
if [[firefoxGeditOpen>0]]
then
echo "Firefox and Gedit must be closed to let the script work"
exit 1
fi
while(true)
do
firefox &
firefoxPid=$!
gedit &
geditPid=$!
echo "Firefox PID $firefoxPid Gedit PID $geditPid">>result.txt
wait
echo "You have closed all the processes. They will be re-opened">>result.txt
done
提前致谢!
答案1
如我所说在我的评论中这里缺少一些重要部分,这些命令放在一起不太有意义,但我会仔细介绍它们。
if [ ! -w "." ]
:.
表示当前目录。-w
测试它是否可写。!
否定测试(因此,如果目录不是可写与相反)。ps -d | grep -ic -e firefox -e gedit
:ps -d
打印所有进程减去会话启动者。grep
搜索管道输出中的ps
模式(我们稍后会讲到)。-i
使搜索不区分大小写。-c
输出数数匹配次数而不是实际匹配次数。-e
采用搜索表达式。在本例中为firefox
和gedit
。因此,如果 FF 和 gedit 均未运行,则命令将输出 0。如果其中一个正在运行,则输出 1。如果两个都在运行,则输出 2。firefox &
:启动 Firefox。&
强制该进程进入后台。firefoxPid=$!
:在 bash shell 脚本中$!
保存最后一个后台命令的作业编号。firefoxPid
是一个变量。因此,这里发生的事情是最后一个后台命令(恰好是 Firefox 的)的作业编号存储到名为的变量中firefoxPid
。