Как отправить команду с аргументами без пробелов?

Предполагая, что после отправки EOF соединение останется незанятым, вы можете использовать параметр -w timeout , который работает для тайм-аута , равного ноль (в отличие от дурацкого -q варианта ...)

cat tsmmessage.bin | nc -u localhost 4300 -w0
8
14.03.2017, 11:17
3 ответа

Если бы существовала только переменная, значение которой является пробелом ... Или, в более общем смысле, содержит пробел.

cat${IFS}file.txt

Значение по умолчанию IFS - это пробел, табуляция, новая строка. Все эти символы - пробелы. Если вам нужен единственный пробел, вы можете использовать $ {IFS% ??} .

Точнее, причина, по которой это работает, связана с тем, как работает разбиение слов. Критично, это применяется после подстановки значений переменных. А при разделении слов каждый символ в значении IFS рассматривается как разделитель, поэтому по построению, пока для IFS установлено непустое значение, $ {IFS } разделяет слова.Если IFS содержит более одного символа, каждый символ является разделителем слов. Последовательные символы разделителя, которые являются пробелами, обрабатываются как один разделитель, поэтому результатом раскрытия cat $ {IFS} file.txt являются два слова: cat и file .txt . Разделители без пробелов обрабатываются отдельно, с чем-то вроде IFS = ',.'; cat $ {IFS} file.txt , cat получит два аргумента: пустой аргумент и file.txt .

23
27.01.2020, 20:09

Я нашел способ, предполагающий, что оболочка поддерживает csh -подобное расширение фигурных скобок, например ksh , bash или yash -o brace-expand ( zsh поддерживает раскрытие фигурных скобок, но не в качестве первого аргумента, поскольку он конфликтует с группировкой команд) :

{cat,file.txt}

таким образом вам не нужно использовать пробелы в аргументе.

8
27.01.2020, 20:09

Один из вариантов - использовать значение IFS с раскрытием переменной:

$ echo Hello! > file.txt

$ IFS=:
$ a=cat:file.txt
$ $a
Hello!
3
27.01.2020, 20:09

Теги

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