Los backticks no pueden funcionar allí porque se evalúan una vez antes de findque incluso se ejecuten y el resultado se usa como un parámetro estático para encontrar.
Sven
Respuestas:
10
La mejor manera de hacerlo es usar parámetros posicionales. Y $()es preferible para la sustitución de comandos sobre backticks porque es más legible (no se confunde con comillas simples) y se puede anidar fácilmente sin tener que escapar mucho.
Gracias por resolver mi problema inmediato, pero todavía tengo curiosidad por saber si los backticks se pueden usar como se describe. Solo para ampliar mis horizontes.
RomanSt
Tendría que invocar el shell a través de bash -co similar.
Ignacio Vazquez-Abrams
0
La única forma de usarlos (AFAIK) es colocarlos en un archivo de script bash y usar el script en -exec. Lo mismo con$()
No se olvide xargs! Su ejemplo invocaría un nuevo proceso de shell para cada archivo encontrado.
Prefiero esto:
find ... | xargs stat -c "Blah: %a"
findgenera una lista de todo lo encontrado, xargslee una lista de argumentos stdiny ejecuta su parámetro con esos argumentos en la línea de comando, construyendo una línea de comando lo más larga posible. Funciona porque stat, como la mayoría de los comandos / programas adecuados, toma cualquier número de parámetros. (comparar ls, rmy echopor ejemplo)
Si cree que es absolutamente necesario iniciar un nuevo proceso para cada archivo, use xargs -n 1para pasar solo los 1parámetros a cada comando. De esa manera, puede imitar los métodos ineficientes como este:
find ... | xargs -n 1 stat -c "Blah: %a"
(¡Pruébalo en un gran sistema de archivos en una computadora lenta y calcula las diferencias!)
Aprecio el esfuerzo, pero necesito esos backticks. Obviamente mi ejemplo está simplificado y usa echo + stat; el script real no utiliza ni echo ni stat, por lo que su truco de juntarlos en la cadena de formato de stat no ayuda en absoluto.
find
que incluso se ejecuten y el resultado se usa como un parámetro estático para encontrar.Respuestas:
La mejor manera de hacerlo es usar parámetros posicionales. Y
$()
es preferible para la sustitución de comandos sobre backticks porque es más legible (no se confunde con comillas simples) y se puede anidar fácilmente sin tener que escapar mucho.El guión bajo es un marcador de posición para
$0
.fuente
¿Para qué?
O úsalo
bash -c
si realmente tienes que:fuente
bash -c
o similar.La única forma de usarlos (AFAIK) es colocarlos en un archivo de script bash y usar el script en -exec. Lo mismo con
$()
fuente
No se olvide
xargs
! Su ejemplo invocaría un nuevo proceso de shell para cada archivo encontrado.Prefiero esto:
find ... | xargs stat -c "Blah: %a"
find
genera una lista de todo lo encontrado,xargs
lee una lista de argumentosstdin
y ejecuta su parámetro con esos argumentos en la línea de comando, construyendo una línea de comando lo más larga posible. Funciona porquestat
, como la mayoría de los comandos / programas adecuados, toma cualquier número de parámetros. (compararls
,rm
yecho
por ejemplo)Si cree que es absolutamente necesario iniciar un nuevo proceso para cada archivo, use
xargs -n 1
para pasar solo los1
parámetros a cada comando. De esa manera, puede imitar los métodos ineficientes como este:find ... | xargs -n 1 stat -c "Blah: %a"
(¡Pruébalo en un gran sistema de archivos en una computadora lenta y calcula las diferencias!)
fuente