Размер буфера

Не волнуйтесь, вы не первый и не будете последним, кого это укусит. Это наиболее часто задаваемый вопрос о оболочках, который отвечает за большинство ошибок и уязвимостей безопасности, обнаруженных в сценариях оболочек. Это связано с плохим выбором дизайна оболочки Борна и оболочки 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 , которая позволяет осуществлять низкоуровневое взаимодействие с пакетами и подобием

-121--290420-

Необходимо использовать tcpdump с коммутатором -w .

tcpdump -i INTERFACE -w FILENAME

Замените INTERFACE интерфейсом, который требуется прослушать, и FILENAME расположением файла, в который необходимо записать выходные данные.

1
18.08.2018, 17:46
2 ответа

По крайней мере, в моей системе это выглядит как 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
0
27.01.2020, 23:42

Это зависит от реализации -, но вы видите, что awk открывает выходной файл после открытия его ввода. Исходный входной файл -потерян, за исключением дескриптора открытого файла -awk, который он считывает.

Это может делать не только awk :, это свойственно многим приложениям...

p.s. :буфер вашего диска (размер не определяется из вопроса ).

1
27.01.2020, 23:42

Теги

Похожие вопросы