.bashrc
читается только при запуске интерактивной оболочки. Это неправильное место для установки переменных среды: как вы обнаружили, они устанавливаются только в приложениях, запускаемых через интерактивную оболочку.
Чтобы установить переменную среды для всего сеанса, в большинстве систем ее можно установить в ~/.profile
. Поскольку вы используете KDE, лучшим местом может быть ~/.config/plasma-workspace/env/preload.sh
. Таким образом, переменная будет установлена только в том случае, если вы войдете в систему под KDE, а не в том случае, если вы выберете другую среду с графическим интерфейсом или если вы войдете в текстовый режим (например, по сети). Помните, однако, что настройка LD_PRELOAD
в очень широком смысле может быть опасной: библиотека будет загружена в каждую программу, которую вы запускаете, а не только в программы, использующие библиотеку Qt. Хотя этот выглядит вполне безобидно.
Вполне вероятно, что скрипт использует имя файла таким образом, что его имя интерпретируется как набор опций какой-либо утилиты, как в
rm "$filename"
, когда $filename
начинается с дефиса.
Есть два способа убедиться, что команда выполняется правильно, если имя пути может начинаться с тире:
Убедитесь, что имя пути не начинается с дефиса , например, включив абсолютный или относительный путь. Если файл в текущем каталоге должен быть удален с rm "$filename"
, убедитесь, что $filename
начинается с ./
. Обычно это вопрос смены цикла с
for filename in some-pattern; do
в
for filename in./some-pattern; do
Используйте --
, чтобы сообщить утилите об окончании параметров командной строки, как в
rm -- "$filename"
Анализ параметров в командной строке остановится на --
, и все последующие аргументы будут восприниматься утилитой как операнды, а не как возможные параметры. Это хорошее решение, когда вы получаете имя пути от пользователя в командной строке и не знаете, указано ли оно вместе с путем или нет. Обратите внимание, что вы не можете просто добавить ./
к заданному пути, так как это сделало бы путь относительным к текущему каталогу, даже если пользователь указал абсолютный путь.
Относится к именам файлов, содержащим пробелы и т. д.: