Почему eval не работает с подстановкой команд? [closed]

У меня была такая же проблема (Jessie устанавливает только с одного компакт-диска, без рабочего стола), и когда я запускал tasksel, для Gnome не было выбора.

  1. Я добавил зеркала соответствующих стран в свой /etc/apt/sources.list из https://linuxconfig.org/debian-apt-get-jessie-sources-list

  2. , затем сделал apt- get update

  3. перезапустил tasksel, и на этот раз было множество опций рабочего стола, включая Gnome

HTH

1
18.11.2018, 22:53
2 ответа

Приведенный пример работает и для меня, но есть один потенциальный источник проблем :в зависимости от определяемых значений вам могут понадобиться двойные -кавычки вокруг подстановки команд, чтобы предотвратить разделение слов и расширение подстановочных знаков:

eval "$("${DIR}/test.py" "$1")"

Обратите внимание, что, по крайней мере, отсутствие двойных -кавычек вызовет проблемы, если вывод содержит несколько команд, разделенных символами новой строки. Это связано с тем, что без двойных -кавычек вывод разбивается на «слова» на основе пробелов (, как правило, пробелов, табуляции и новых строк ), а затем evalобъединяется вместе с пробелами. В результате :все символы новой строки преобразуются в пробелы, поэтому все команды, которые должны быть отдельными строками, сливаются в одну длинную команду.

В крайнем случае предположим, что test.py выводит это:

# Define some variables:
export SOME_VAR="6 * 5"

Процесс разделения -расширения -слияния дает эту результирующую команду:

# Define some variables: export SOME_VAR="6 file1.txt file2.txt otherfile.png 5"

(где «file1.txt file2.txt otherfile.png» — все файлы в текущем каталоге. )Это совсем не то, чего вы хотите.

2
27.01.2020, 23:23

Проблема заключалась в том, что sourceне позволял экспортировать переменные в текущую оболочку.

1
27.01.2020, 23:23

Теги

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