Объединение строки и переменной в сценарии оболочки - PullRequest
0 голосов
/ 05 мая 2020

Содержимое файла:

#data.conf
ip=127.0.0.1
port=7890
delay=10
key=1.2.3.4
debug=true

Shell Script:

#!/bin/bash
typeset -A config
config=()
config_file_path="./data.conf"
cmd="java -jar ./myprogram.jar"

#This section will read file and put content in config variable
while read line
do
    #echo "$line"
    if echo $line | grep -F = &>/dev/null
    then
        key=$(echo "$line" | cut -d '=' -f 1)
        config[$key]=$(echo "$line" | cut -d '=' -f 2)
        echo "$key" "${config["$key"]}"
    fi
done < "$config_file_path"

cmd="$cmd -lh ${config["ip"]} -lp ${config["port"]} -u ${config["debug"]} -hah \"${config["key"]}\" -hap ${config["delay"]}"
echo $cmd

Ожидаемый результат:

java -jar myprogram.jar -lh 127.0. 0.1 -lp 7890 -u true -hah "1.2.3.4" -hap 10 -b

Вывод:

Каждый раз какой-то неожиданный o / p

Пример. -lp 7890rogram.jar

Похоже, он перезаписывает одну и ту же строку снова и снова

1 Ответ

0 голосов
/ 05 мая 2020

Что касается предоставленных комментариев и дополнительной автоматической c очистки данных в скрипте, вы можете указать Как преобразовать DOS / Windows новую строку (CRLF) в Unix новую строку (LF ) в Bash скрипте? и Удалите возврат каретки в Unix

# This section will clean the input config file
sed -i 's/\r$//' "${config_file_path}"

внутри вашего скрипта. Это предотвратит ошибку в будущих запусках.

...