Скрипт, который вводит файлы, начинающиеся с тире и имеющие пробел в центре [закрыто]

.bashrc читается только при запуске интерактивной оболочки. Это неправильное место для установки переменных среды: как вы обнаружили, они устанавливаются только в приложениях, запускаемых через интерактивную оболочку.

Чтобы установить переменную среды для всего сеанса, в большинстве систем ее можно установить в ~/.profile. Поскольку вы используете KDE, лучшим местом может быть ~/.config/plasma-workspace/env/preload.sh . Таким образом, переменная будет установлена ​​только в том случае, если вы войдете в систему под KDE, а не в том случае, если вы выберете другую среду с графическим интерфейсом или если вы войдете в текстовый режим (например, по сети). Помните, однако, что настройка LD_PRELOAD в очень широком смысле может быть опасной: библиотека будет загружена в каждую программу, которую вы запускаете, а не только в программы, использующие библиотеку Qt. Хотя этот выглядит вполне безобидно.

0
01.12.2018, 19:37
1 ответ

Вполне вероятно, что скрипт использует имя файла таким образом, что его имя интерпретируется как набор опций какой-либо утилиты, как в

rm "$filename"

, когда $filenameначинается с дефиса.

Есть два способа убедиться, что команда выполняется правильно, если имя пути может начинаться с тире:

  1. Убедитесь, что имя пути не начинается с дефиса , например, включив абсолютный или относительный путь. Если файл в текущем каталоге должен быть удален с rm "$filename", убедитесь, что $filenameначинается с ./. Обычно это вопрос смены цикла с

    for filename in some-pattern; do
    

    в

    for filename in./some-pattern; do
    
  2. Используйте --, чтобы сообщить утилите об окончании параметров командной строки, как в

    rm -- "$filename"
    

    Анализ параметров в командной строке остановится на --, и все последующие аргументы будут восприниматься утилитой как операнды, а не как возможные параметры. Это хорошее решение, когда вы получаете имя пути от пользователя в командной строке и не знаете, указано ли оно вместе с путем или нет. Обратите внимание, что вы не можете просто добавить ./к заданному пути, так как это сделало бы путь относительным к текущему каталогу, даже если пользователь указал абсолютный путь.

Относится к именам файлов, содержащим пробелы и т. д.:

3
28.01.2020, 02:23

Теги

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