Не волнуйтесь, вы не первый и не будете последним, кого это укусит. Это наиболее часто задаваемый вопрос о оболочках, который отвечает за большинство ошибок и уязвимостей безопасности, обнаруженных в сценариях оболочек. Это связано с плохим выбором дизайна оболочки Борна и оболочки Korn в более ранней истории Unix.
В оболочке Борна и большинстве её потомков (ksh, ash, pdksh, mksh, bash, dash, yash...), оставляя переменную без кавычек - оператор split + glb.
Лучше всего показано с:
$ var='*.txt,.*'
$ IFS=',' # default is space tab and newline
$ printf '<%s>\n' $var
<file.txt>
<.>
<..>
Оболочка разделила $ var
на ,
символах и расширила каждое из полученных слов (которые в данном случае содержат подстановочные символы) в списке файлов, соответствующих соответствующему образцу.
zsh
), вы всегда должны цитировать ваши переменные (если вы не хотите разделить и/или glob ) $ printf '<%s>\n' "$var"
<*.txt:.*>
Так что в вашем случае:
mv /sample/pdf/noriginalName.pdf "/sample/outputPdf/${NAME}${Name1}.pdf"
или:
mv /sample/pdf/noriginalName.pdf /sample/outputPdf/"${NAME}${Name1}".pdf
(где вы ставите кавычки не имеет значения, пока переменные цитируются)
Вы можете отключить разделение только с:
IFS=
И вы можете отключить глоббинг только с:
set -f # affects all globbing, not only the one done upon variable expansion.
С:
IFS=; set -f
Вы получаете то же поведение, как zsh
для расширения параметров, нет глоббинга, нет разделения. Однако в
cmd "$var"
Если вы хотите, чтобы cmd
был передан один пустой аргумент, если $ var
пуст или не задан (в отличие от нет аргумент в Типичным примером является [-n "$ var"]
, где если вы не процитируете $ var
, тест всегда будет верным, так как, когда $ var
пуст, он разрешается в [-n]
вместо [-n "]
.
В zsh
глобализация и расщепление не выполняются неявно при переменном расширении (за исключением режима эмуляции sh
или ksh
). Вы должны запросить его явно, используя определенные операторы расширения: $ = var
для разделения слов, $ ~ var
для глоббинга (или $ {~ var}
; $ ~ = var
для обоих).
Другими оболочками, не имеющими такого рода проблем, являются рыба
и rc
и ее потомки ( es
, akanga
).
В (t) csh
:
cmd "$var"
помогает, но недостаточно, так как он не работает, если $ var
содержит символы новой строки. Там вам нужно:
cmd $var:q
-121--290425- вы хотите tcpdump
не nc
, и синтаксис
tcpdump -i eth0
netcat
предназначен только для базового тестирования TCP/IP. tcpdump
использует библиотеку libpcap
, которая позволяет осуществлять низкоуровневое взаимодействие с пакетами и подобием
Необходимо использовать tcpdump
с коммутатором -w
.
tcpdump -i INTERFACE -w FILENAME
Замените INTERFACE интерфейсом, который требуется прослушать, и FILENAME расположением файла, в который необходимо записать выходные данные.
По крайней мере, в моей системе это выглядит как 32768 из файла и 65536 из файла. труба:
$ yes | head -100000 | tee file > pipe
$ awk '{print "n" > ARGV[1]}' file
$ sed s/y/n/ pipe | awk 'BEGIN {while (getline < "-") print > ARGV[1]}' pipe
$ wc -l file pipe
32768 file
65536 pipe
Это зависит от реализации -, но вы видите, что awk открывает выходной файл после открытия его ввода. Исходный входной файл -потерян, за исключением дескриптора открытого файла -awk, который он считывает.
Это может делать не только awk :, это свойственно многим приложениям...
p.s. :буфер вашего диска (размер не определяется из вопроса ).