El problema seguramente es la opción -i
. Existen al menos tres versiones diferentes de nc
. openbsd-netcat
,gnu-netcat
ynmap-ncat
.
Probablemente cambió de una de las versiones nc
donde la opción -i
significa intervalo de búfer a la nmap
donde -i
significa tiempo de espera. Así que suelte la opción -i
o reemplácela por -d
.
A continuación, he reunido líneas manuales para la opción -i
de cada versión nc
mencionada. También incluí -d
para 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
Для вашего конкретного случая:
#!/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[@]}"
расширяется на все значения массива как отдельные слова (, не разбитые на пробелы ). Почему мой сценарий оболочки забивается пробелами или другими специальными символами? содержит больше информации по этому вопросу в целом, и Как мы можем запустить команду, хранящуюся в переменной? в спец.