Пробелы заменяются на двоеточия при передаче переменных окружения в WSL из-за использования OpenFoam.

Вопрос или проблема

Я использую Windows Subsystem for Linux и выбрал Ubuntu. Но я не могу вызвать программу, установленную на Windows, поэтому я проверяю список переменных окружения в WSL, кажется, что пробелы заменяются двоеточиями при передаче переменных окружения в WSL.
Учитывая, что в WSL список переменных окружения является списком, разделенным двоеточиями. В Win32 это список, разделенный точками с запятой.
Я думаю, это причина, почему я не могу вызвать программу, установленную на Windows. Я проверил другой ноутбук, это явление не существует, и все работает нормально.

Мой вопрос:

  1. Почему возникает эта проблема?
  2. Как я могу это исправить?

введите описание изображения здесь

введите описание изображения здесь

Я думаю, у вас несколько проблем здесь.

  1. Выполнение программы бинарного формата Windows из WSL Linux Shell.
    Вы запускаете Windows, так почему бы не запустить вашу программу из Windows CMD, .BAT файла или Powershell?.

В любом случае, убедитесь, что вы включили это в /etc/wsl.conf

[interop]
enabled=True

Обратите внимание: Эта опция доступна в Insider Build 17713 и новее.

  1. Почему проблема с путем, преобразованием пробелов в : ?
    Я не знаю. В Linux пробелы в пути представлены:
\ 

(черта и пробел, внутри кавычек, или пробел, если кавычки не используются)

Так что я думаю, вам нужно заменить ваш PATH тем, что у вас, заменив:
d/ProgramFiles/VS_Code/Microsoft:VS:Code/bin
на:
d/ProgramFiles/VS_Code/Microsoft\ VS\ Code/bin

Пожалуйста, проверьте:
/etc/wsl.conf

У вас должно быть:

[interop]
appendWindowsPath=True

Пожалуйста, проверьте опции в [automount] разделе.
https://docs.microsoft.com/en-us/windows/wsl/wsl-config#configure-per-distro-launch-settings-with-wslconf

Если вам нужно исправлять ваш PATH каждый раз, вы можете сделать скрипт, например, fixpath.sh:

#!/usr/bin/env bash
PATH=$(echo "$PATH" | sed "s/Microsoft:VS:Code/Microsoft\ VS\ Code/")
export PATH

Тогда вы запускаете:

source ./fixpath.sh

Удачи

Я нашел, что это происходит потому, что я использую OpenFoam, и когда переменная окружения PATH OpenFoam начинает действовать, она перестраивает переменную окружения PATH, соответствующая настройка в файле ~/.bashrc:

source /opt/openfoam8/etc/bashrc

Как показано на следующем скриншоте, OpenFoam перестраивает переменную окружения $PATH, используя двоеточие и пробел в качестве разделителя.
введите описание изображения здесь

Ответ или решение

Когда вы используете Windows Subsystem for Linux (WSL) и пытаетесь вызвать программы, установленные в Windows, могут возникать проблемы с путями из-за разницы в разделителях переменных окружения. В Windows используются точки с запятой (;) в качестве разделителей, тогда как в WSL для Linux применяются двоеточия (:). В вашем случае, проблема заключается в том, что пробелы в путях оказываются замененными двоеточиями, что мешает корректному вызову программ.

Почему возникает проблема?

  1. Неправильная обработка пробелов: Проблема связана с тем, как OpenFoam, который вы используете, управляет переменной окружения PATH. Когда вы вызываете source /opt/openfoam8/etc/bashrc, OpenFoam изменяет переменную PATH, используя двоеточия как разделители. Если в пути к программе есть пробелы, они могут некорректно обрабатываться, и вместо разделителей будут вставляться двоеточия. Это также связано с тем, что в Bash пробелы должны экранироваться, иначе они интерпретируются как конец аргументов.

  2. Разделители в Windows и WSL: Как упоминалось ранее, Windows использует разделители ;, в то время как в Unix-подобных системах, включая WSL, используются :. Это различие может приводить к несовместимости и ошибкам в путях, особенно если вы пытались перенести значения переменных окружения без учета этих особенностей.

Как исправить эту проблему?

  1. Редактирование файла ~/.bashrc: Вам нужно изменить конфигурацию OpenFoam, чтобы избежать проблем с переменной PATH. Это можно сделать, отредактировав файл ~/.bashrc или задав структуру PATH прямо в этом файле, чтобы избежать конфликта с установленными путями. Проверьте, как OpenFoam формирует переменную PATH, и постарайтесь избежать вставки значений с пробелами.

  2. Использование экранирования пробелов: Чтобы правильно указать пути с пробелами, используйте экранирование. Например, вместо d/ProgramFiles/VS_Code/Microsoft:VS:Code/bin, используйте d/ProgramFiles/VS_Code/Microsoft\ VS\ Code/bin. Это позволит Bash интерпретировать пробелы корректно.

  3. Изменение конфигурации WSL: Убедитесь, что вы добавили в файл /etc/wsl.conf следующее:

    [interop]
    enabled=True
    appendWindowsPath=True
  4. Скрипт для автоматического исправления: Чтобы каждый раз не редактировать PATH вручную, вы можете создать скрипт fixpath.sh:

    #!/usr/bin/env bash
    PATH=$(echo "$PATH" | sed "s/Microsoft:VS:Code/Microsoft\ VS\ Code/")
    export PATH

    После создания скрипта, каждую сессию WSL можно будет просто запускать команду:

    source ./fixpath.sh

Заключение

Эта проблема, связанная с переменной окружения PATH и обработкой пробелов, может вызвать затруднения при работе с OpenFoam и другими программами. Важно учитывать различия между Windows и WSL, особенно в области форматирования путей и переменных окружения. Настройка конфигурации, аккуратное управление переменными и использование экранирования пробелов помогут вам избежать подобных ситуаций в будущем.

Оцените материал
Добавить комментарий

Капча загружается...