Tentei usar sed
para converter PATH
caminhos como entrada para find
:
User.Name@Machine-Name ~
$ echo $PATH | sed -e 's/:/\n/g' \
| sed -n -e 's=.*="&"=' -e '2,5p'
"/bin"
"/usr/local/bin"
"/usr/bin"
"/c/Program Files/Eclipse Adoptium/jdk-8.0.392.8-hotspot/bin"
Os caminhos são citados para proteger os espaços. Infelizmente, eles não são reconhecidos corretamente quando enviados para find
:
User.Name@Machine-Name ~
$ find \
$(echo $PATH | sed -e 's/:/\n/g' | sed -n -e 's=.*="&"=' -e '2,5p') \
-iname '*libc*'
find: ‘"/bin"’: No such file or directory
find: ‘"/usr/local/bin"’: No such file or directory
find: ‘"/usr/bin"’: No such file or directory
find: ‘"/c/Program’: No such file or directory
find: ‘Files/Eclipse’: No such file or directory
find: ‘Adoptium/jdk-8.0.392.8-hotspot/bin"’: No such file or directory
Na verdade, os espaços não são protegidos e são interpretados como delimitadores de argumentos.
Por outro lado, se eu simplesmente digitar um caminho entre aspas, tudo funcionará bem:
User.Name@Machine-Name ~
$ find "/bin" -iname '*libc*' # Finds nothing, but no syntax error
User.Name@Machine-Name ~
Como posso entender isso e como posso converter eficientemente PATH
caminhos em argumentos (digamos, for find
)?
Se você não precisa preservar elementos vazios no
PATH
, você pode tentare então (observando que os arrays bash são indexados em zero)