O problema é -n1I'{}'
. Você deseja dividir essas duas opções, caso contrário xargs
não poderá analisá-las corretamente. Basicamente, após cada argumento de opção ( 1
e '{}'
no seu caso), você precisa de um separador de espaço em branco:
dscl . -list /Users | xargs -n1 -I'{}' dscl -plist . -read /Users/{}
Ou, se você quiser apenas usar um loop simples:
for user in $(dscl . -list /Users); do dscl -plist . -read /Users/"$user"; done
Com while read
, você pode usar a substituição de processos :
while read user; do dscl -plist . -read /Users/"$user"; done < <(dscl . -list /Users)
... ou você canaliza:
dscl . -list /Users | while read user; do dscl -plist . -read /Users/"$user"; done