Bash

查找不起作用,定位起作用

  • February 24, 2020

所以我有一點:

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可以輕鬆地採用多個模式。這並不意味著它完美無瑕。未引用通常$()錯誤的。在這裡您希望輸出被拆分,仍然可能會出現其他問題。

引用自:https://unix.stackexchange.com/questions/569365