Bash
查找不起作用,定位起作用
所以我有一點:
systemctl list-unit-files | grep --ignore-case networkmanager | grep --ignore-case service | cut --fields=1 --delimiter=" "
作為輸出給出:
NetworkManager-dispatcher.service NetworkManager-wait-online.service NetworkManager.service
我有一點:
find / -name NetworkManager-dispatcher.service 2>/dev/null
具有以下輸出:
/usr/lib/systemd/system/NetworkManager-dispatcher.service
然而,
find / -name $(systemctl list-unit-files | grep --ignore-case networkmanager | grep --ignore-case service | cut --fields=1 --delimiter=" ") -print 2>/dev/null
什麼都不給,而:
locate $(systemctl list-unit-files | grep --ignore-case networkmanager | grep --ignore-case service | cut --fields=1 --delimiter=" ")
顯示:
/etc/systemd/system/multi-user.target.wants/NetworkManager.service /etc/systemd/system/network-online.target.wants/NetworkManager-wait-online.service /usr/lib/systemd/system/NetworkManager-dispatcher.service /usr/lib/systemd/system/NetworkManager-wait-online.service /usr/lib/systemd/system/NetworkManager.service /usr/lib/systemd/system/NetworkManager.service.d /usr/lib/systemd/system/NetworkManager.service.d/NetworkManager-ovs.conf
為什麼哦為什麼
find
什麼都找不到??? ;-)在你問*“那你為什麼不使用定位?”之前* ,答案是:我在 Manjaro,
locate
不是標準的,而find
…
為什麼哦為什麼
find
什麼都找不到???放下
2>/dev/null
並查看錯誤。這將是:find: paths must precede expression: NetworkManager-wait-online.service
-name
只需要一個參數,你提供三個。第一個被接受。第二個不被辨識為表達式的有效部分,因此find
假設它是一條路徑,(就像/
您提供的那樣);但是“路徑必須先於表達式”。呼叫在語法上是錯誤的,它只是失敗了,而不是“沒有找到任何東西”。
另一方面,
locate
可以輕鬆地採用多個模式。這並不意味著它完美無瑕。未引用通常$()
是錯誤的。在這裡您希望輸出被拆分,仍然可能會出現其他問題。