我創建了一個bash
腳本,用於統計自己啓動的實例。Bash腳本錯誤地計算其本身的實例
這是(在這個例子中,我展示的實例,而不是將它們與wc -l
算起):
#!/bin/bash
nb=`ps -aux | grep count_itself.sh`
echo "$nb"
sleep 20
(當然,我的劇本被命名爲count_itself.sh
)
在執行了它,我希望它返回兩行,但它返回三個:
[email protected]:/# ./count_itself.sh
root 16225 0.0 0.0 12400 1176 pts/0 S+ 11:46 0:00 /bin/bash ./count_itself.sh
root 16226 0.0 0.0 12408 564 pts/0 S+ 11:46 0:00 /bin/bash ./count_itself.sh
root 16228 0.0 0.0 11740 932 pts/0 S+ 11:46 0:00 grep count_itself.sh
經與&
標誌執行它(即在後臺,並手動執行ps -aux
位,它返回兩個,這正是我想要的:
[email protected]:/# ./count_itself.sh &
[1] 16233
[email protected]:/# ps -aux | grep count_itself.sh
root 16233 0.0 0.0 12408 1380 pts/0 S 11:48 0:00 /bin/bash ./count_itself.sh
root 16240 0.0 0.0 11740 944 pts/0 S+ 11:48 0:00 grep --color=auto count_itself.sh
我的問題是:爲什麼ps -aux
執行裏面的腳本返回一行超過預期?
或換句話說,爲什麼在我的第一個示例中創建了id爲16226
的進程?
EDIT(因爲大多數人似乎誤解了我的問題):
我想知道爲什麼bash
執行返回/bin/bash ./count_itself.sh
兩個實例,不爲什麼它返回grep count_itself.sh
。
編輯2:
當然,我正在尋找一種方式來避免這種行爲,並在該腳本返回/bin/bash ./count_itself.sh
只有一次。
'''ps -aux | grep count_itself.sh \''在子外殼中執行,即在子進程中執行。因此,執行腳本的shell會被分叉,然後子運行'ps -aux | grep count_itself.sh'命令。 – Leon
我建議:nb ='ps -aux | grep [c] ount_itself.sh – Cyrus
當你執行'ps -aux | grep count_itself.sh'你的grep把它看作count_itself的一個實例。你需要改進你的正則表達式 – Stargateur