Построение bash-скрипта командной строки с пробелами в путях [дубликаты]

El problema seguramente es la opción -i. Existen al menos tres versiones diferentes de nc. openbsd-netcat,gnu-netcatynmap-ncat.

Probablemente cambió de una de las versiones ncdonde la opción -isignifica intervalo de búfer a la nmapdonde -isignifica tiempo de espera. Así que suelte la opción -io reemplácela por -d.

A continuación, he reunido líneas manuales para la opción -ide cada versión ncmencionada. También incluí -dpara la versión nmap.

OpenBSD:

-i interval        Specifies a delay time interval between lines of text sent and received. Also causes a delay time between connections to multiple ports.

GNU:

-i SECS
--interval SECS    sets the buffering output delay time. This affects all the current modes and makes the connection sock to buffer outgoing data. This means that in tunnel mode everything received from the listening socket is buffered for the connect socket.

NMAP:

-i, --idle-timeout 

0
11.04.2019, 08:18
1 ответ

Для вашего конкретного случая:

#!/bin/bash
LIBDIR="lib dir"
LIBS=("lib1" "lib2")
CMD=(./debug.sh)
for LIB in "${LIBS[@]}"
do
    CMD+=(-I "${LIBDIR}/${LIB}")
done
"${CMD[@]}"
exit

Используются два массива:LIBSдля имен библиотек и CMDдля самой команды. Это также будет работать, если есть другие дополнительные пробелы. +=(...)объединяет новые элементы в конец массива точно так же, как он объединяет новую строку в конец строки. "${CMD[@]}"расширяется на все значения массива как отдельные слова (, не разбитые на пробелы ). Почему мой сценарий оболочки забивается пробелами или другими специальными символами? содержит больше информации по этому вопросу в целом, и Как мы можем запустить команду, хранящуюся в переменной? в спец.

2
28.01.2020, 02:30

Теги

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