Передача переменных оболочки, содержащих пробелы в качестве аргумента - PullRequest
0 голосов
/ 06 марта 2019

У меня есть динамический путь в переменной DATASET_CONFIG

Это небольшой код, демонстрирующий проблему

SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
RUN_SCRIPT="$SCRIPT_DIR/file.py"
DATASET_CONFIG="$SCRIPT_DIR/../dataset_config/ffhq.json"
hps_dataset="--dataset_config $DATASET_CONFIG --dataset_worker_num 16"
python_version="python3"

$python_version "$RUN_SCRIPT" \
$hps_dataset \
;

Как видите, я использовал "$RUN_SCRIPT" вместо$RUN_SCRIPT потому что SCRIPT_DIR содержат пробелы, но я не могу сделать то же самое для $hps_dataset

Ответы [ 2 ]

1 голос
/ 06 марта 2019

Вам нужно использовать массив для хранения набора данных. Я бы также рекомендовал вам прекратить использование имен переменных ALLCAPS (, вот почему ):

script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
run_script="$script_dir/file.py"
dataset_config="$script_dir/../dataset_config/ffhq.json"
hps_dataset=( --dataset_config "$dataset_config" --dataset_worker_num 16 )
python_version="python3"

"$python_version" "$run_script" "${hps_dataset[@]}"

Используйте все кавычки, показанные здесь.

Поскольку мы используем массив, вы не можете использовать / bin / sh для запуска скрипта. Вам придется явно использовать bash или ksh (или, возможно, zsh)

0 голосов
/ 06 марта 2019

Вы должны использовать что-то вроде этого

hps_dataset="--dataset_config \"$DATASET_CONFIG\" --dataset_worker_num 16"

Также для будущих переменных в bash все заглавные буквы, такие как HPS_DATASET.

...