Então eu tenho esse pouco:
systemctl list-unit-files | grep --ignore-case networkmanager | grep --ignore-case service | cut --fields=1 --delimiter=" "
O que dá como saída:
NetworkManager-dispatcher.service
NetworkManager-wait-online.service
NetworkManager.service
E eu tenho esse pouco:
find / -name NetworkManager-dispatcher.service 2>/dev/null
com a seguinte saída:
/usr/lib/systemd/system/NetworkManager-dispatcher.service
No entanto,
find / -name $(systemctl list-unit-files | grep --ignore-case networkmanager | grep --ignore-case service | cut --fields=1 --delimiter=" ") -print 2>/dev/null
não dá nada enquanto:
locate $(systemctl list-unit-files | grep --ignore-case networkmanager | grep --ignore-case service | cut --fields=1 --delimiter=" ")
mostra:
/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
Por que oh por que não find
encontra nada??? ;-)
Antes de perguntar "Por que você não usa localizar então?" , a resposta para isso é: estou no Manjaro e locate
não é padrão, enquanto find
é ...
Solte
2>/dev/null
e veja o erro. Será:-name
precisa de exatamente um argumento, você está fornecendo três. A primeira é aceita. O segundo não é reconhecido como uma parte válida de uma expressão, entãofind
assume que é um caminho (como/
você forneceu); mas "caminhos devem preceder a expressão".A invocação está sintaticamente errada e simplesmente falha em vez de "não encontra nada".
Por outro lado
locate
, pode levar mais de um padrão facilmente. Isso não significa que seja impecável. Unquoted$()
é muitas vezes errado . Aqui você quer que a saída seja dividida, ainda outros problemas podem ocorrer.