Как я могу исправить предупреждение: подстановка команды: проигнорированный нулевой байт на входе?

Я могу ошибаться - пожалуйста, поправьте меня, если я есть. Из вашего текста выше, кажется, что вы добавляете строки

sudo apt-get update
sudo apt-get install qgis python-qgis
sudo apt-get install qgis-plugin-grass 

в файл /etc/apt/sources.list. Это неверно - строки 'sudo apt-get ...' - это команды, которые должны быть введены в терминал, чтобы попросить Ubuntu извлечь пакеты в вашу операционную систему. Нажмите ctrl + alt + t, чтобы открыть терминал для этой цели. Команда sudo запросит пароль перед продолжением.

8
задан 18 June 2017 в 08:07

3 ответа

Это предупреждение появляется как новая функция в Bash-4.4 - см., например, подменю команды с нулевыми байтами генерирует предупреждение.

Один из вариантов - снять или преобразовать нулевой байт в ваш конвейер, например

DBUS_SESSION=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$DBUS_PID/environ | tr '\0' '\n' | sed -e s/DBUS_SESSION_BUS_ADDRESS=//)

(обратите внимание, что я переключился на современную $(. . .) форму подстановки команд вместо обратных шагов).

В качестве альтернативы вы можете использовать встроенную оболочку bash read, которая может иметь дело с нулевыми ограничителями, например:

IFS== read -d '' _ DBUS_SESSION < <(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$DBUS_PID/environ)

(разделить вывод grep с нулевым разделителем на два токена, разделенных символом =, назначить первую мусорную переменную _ и второй - DBUS_SESSION).

[Я не мог проверить их, поскольку у меня нет подходящей версии bash]

8
ответ дан 22 May 2018 в 21:25

Это предупреждение появляется как новая функция в Bash-4.4 - см., например, подменю команды с нулевыми байтами генерирует предупреждение.

Один из вариантов - снять или преобразовать нулевой байт в ваш конвейер, например

DBUS_SESSION=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$DBUS_PID/environ | tr '\0' '\n' | sed -e s/DBUS_SESSION_BUS_ADDRESS=//)

(обратите внимание, что я переключился на современную $(. . .) форму подстановки команд вместо обратных шагов).

В качестве альтернативы вы можете использовать встроенную оболочку bash read, которая может иметь дело с нулевыми ограничителями, например:

IFS== read -d '' _ DBUS_SESSION < <(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$DBUS_PID/environ)

(разделить вывод grep с нулевым разделителем на два токена, разделенных символом =, назначить первую мусорную переменную _ и второй - DBUS_SESSION).

[Я не мог проверить их, поскольку у меня нет подходящей версии bash]

9
ответ дан 18 July 2018 в 11:28

Это предупреждение появляется как новая функция в Bash-4.4 - см., например, подменю команды с нулевыми байтами генерирует предупреждение.

Один из вариантов - снять или преобразовать нулевой байт в ваш конвейер, например

DBUS_SESSION=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$DBUS_PID/environ | tr '\0' '\n' | sed -e s/DBUS_SESSION_BUS_ADDRESS=//)

(обратите внимание, что я переключился на современную $(. . .) форму подстановки команд вместо обратных шагов).

В качестве альтернативы вы можете использовать встроенную оболочку bash read, которая может иметь дело с нулевыми ограничителями, например:

IFS== read -d '' _ DBUS_SESSION < <(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$DBUS_PID/environ)

(разделить вывод grep с нулевым разделителем на два токена, разделенных символом =, назначить первую мусорную переменную _ и второй - DBUS_SESSION).

[Я не мог проверить их, поскольку у меня нет подходящей версии bash]

9
ответ дан 24 July 2018 в 19:48

Другие вопросы по тегам:

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