![Расширение командной строки Linux, повторное использование значений](https://rvso.com/image/1303444/%D0%A0%D0%B0%D1%81%D1%88%D0%B8%D1%80%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%BD%D0%BE%D0%B9%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8%20Linux%2C%20%D0%BF%D0%BE%D0%B2%D1%82%D0%BE%D1%80%D0%BD%D0%BE%D0%B5%20%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B9.png)
Я пытаюсь передать по tftp кучу файлов
tftp -m binary 192.168.1.2 -c put file1 target/file1
Я пытался использовать расширение строки cmd, например
tftp -m binary 192.168.1.2 -c put `ls *` target/`ls *`
но это, похоже, не работает, после цели вставляется «:».
Есть ли быстрый способ расширить этот тип материала?
Я хочу повторно использовать значения, полученные в первом расширении, в следующем расширении.
решение1
Прежде всего, `ls *`
этонеправильный.Того же результата можно достичь, используя только *
, например:
tftp -m binary 192.168.1.2 -c put * target/
Расширения подстановочных знаков обрабатываютсятвоя оболочкаперед запуском команды, поэтому правильный способ раскрытия *
списка файлов — этопросто используйте*
, никогда `ls`
.
Во-вторых,tftp put
команда может загружать несколько файлов, но принимает толькоединый каталог назначенияпри этом. Вам не нужно указывать несколько целей, и это все равно не сработает – tftp
не будет известно, где заканчиваются исходные файлы и начинаются целевые файлы. (Как было сказано ранее, подстановочные знаки раскрываются вашей оболочкой, поэтому tftp
будет получать put file1 file2 file3
,нет put *
.)
Таинственность :
вызвана ls
перечислением содержимого подкаталогов. Когда вы запускаете ls *
, оболочка на самом деле запускается ls file1 file2 dir1
(предположим, у вас есть два файла и каталог). Затем ls
печатает " file1
", " file2
", а затем " dir1: (...all files in dir1...)
".