![Expansión de la línea de comandos de Linux, reutilización de valores](https://rvso.com/image/1303444/Expansi%C3%B3n%20de%20la%20l%C3%ADnea%20de%20comandos%20de%20Linux%2C%20reutilizaci%C3%B3n%20de%20valores.png)
Estoy intentando enviar por tftp un montón de archivos.
tftp -m binary 192.168.1.2 -c put file1 target/file1
He estado intentando usar la expansión de línea cmd como
tftp -m binary 192.168.1.2 -c put `ls *` target/`ls *`
pero esto no parece funcionar, se inserta un ":" después del objetivo.
¿Existe una manera rápida de expandir este tipo de cosas?
Quiero reutilizar los valores que obtuve en la primera expansión en la siguiente expansión.
Respuesta1
En primer lugar, `ls *`
esequivocado.Se puede lograr el mismo resultado deseado usando just *
, como en:
tftp -m binary 192.168.1.2 -c put * target/
Las expansiones comodín son procesadas portu caparazónantes de ejecutar el comando, por lo que la forma correcta de expandirlo *
a una lista de archivos essimplemente usa*
, nunca `ls`
.
En segundo lugar, elftp put
El comando puede cargar varios archivos, pero solo aceptaun único directorio de destinoal hacerlo. No es necesario especificar varios destinos y, de todos modos, no funcionaría: tftp
no sabría dónde terminan los archivos de origen y dónde comienzan los archivos de destino. (Como se dijo anteriormente, su shell expande los comodines, por lo que tftp
recibiría put file1 file2 file3
,no put *
.)
El misterio :
se debe a ls
la enumeración del contenido de los subdirectorios. Cuando ejecuta ls *
, el shell realmente se ejecuta ls file1 file2 dir1
(supongamos que tiene dos archivos y un directorio). Luego ls
imprime " file1
", " file2
", seguido de " dir1: (...all files in dir1...)
".