Что произойдет, если я выполню эту команду set, предназначенную для командной строки Windows, в Bash в Linux?

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

Что произойдет, если я выполню эту команду set, предназначенную для командной строки Windows, в Bash в Linux?

set "PATH=C:\Program Files\Git\bin;%USERPROFILE%\AppData\Local\Programs\Git\bin;%PATH%"
echo %PATH%

В командной строке Windows это изменяет PATH в соответствии с моими потребностями, чтобы я мог запускать Git\bin\bash.exe как bash напрямую в командной строке Windows.

Когда я запускаю это в Git Bash на Windows или в Bash в Linux Ubuntu, ошибок не возникает. Команда, кажется, выполняется нормально, но ничего не происходит. Как мне проверить, что случилось? Безопасно ли это выполнять в Linux? Мне не нужно, чтобы это что-то делало в Linux, но чтобы установить PATH в Windows.


Для тех, кто интересуется:

Почему это? Мне нужен один скрипт, который будет работать как в командной строке Windows, так и в Linux Bash, и это будет перед начальным кодом, который запускает скрипт в обоих случаях. Это связано с моим Q&A здесь: Как сконфигурировать Bash-скрипт preBuildSteps.sh, который выполняется в рамках предшествующего процесса сборки в MPLAB X IDE как на Windows, так и на Linux.

Команда set в Bash универсальна, но когда она используется таким образом, она не устанавливает переменные окружения – любые неопциональные аргументы, которые она принимает, фактически помещаются в параметры оболочки $1..$9 (равные %1..%9 в Cmd).

$ echo "$1"
(ничего)

$ set a=bc def gh=ijkl

$ echo "$1"
a=bc

$ echo "$a"
(ничего)

О, я понял. В Linux позиционные параметры $1, $2, $3 и т.д. могут быть изменены с помощью команды set. Я об этом забыл. Итак, set whatever просто устанавливает первый позиционный параметр, доступный через $1, в строку whatever.

Вы можете увидеть это здесь в Bash в Linux:

$ set whatever
$ echo $1
whatever

Таким образом, set "PATH=C:\Program Files\Git\bin;%USERPROFILE%\AppData\Local\Programs\Git\bin;%PATH%" просто устанавливает позиционный параметр $1 в строку PATH=C:\Program Files\Git\bin;%USERPROFILE%\AppData\Local\Programs\Git\bin;%PATH%. Это безвредно. Идеально для моих нужд!

$ set "PATH=C:\Program Files\Git\bin;%USERPROFILE%\AppData\Local\Programs\Git\bin;%PATH%"
$ echo $1
PATH=C:\Program Files\Git\bin;%USERPROFILE%\AppData\Local\Programs\Git\bin;%PATH%

Теперь я помню: я писал об этом некоторое время назад здесь: Как изменить аргументы командной строки $1, $2 и т.д. в Bash, используя set --

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

Если вы выполните команду set, предназначенную для командной строки Windows, в среде Bash на Linux, произойдут следующие события и взаимодействия:

1. Команда set в контексте Bash

В Bash команда set не используется для установки переменных среды так, как это делается в командной строке Windows (cmd). Вместо этого, команда set в Bash управляет позиционными параметрами и переменными оболочки. Ваша команда:

set "PATH=C:\Program Files\Git\bin;%USERPROFILE%\AppData\Local\Programs\Git\bin;%PATH%"

просто присваивает строку PATH=C:\Program Files\Git\bin;%USERPROFILE%\AppData\Local\Programs\Git\bin;%PATH% переменной $1. Это происходит без каких-либо ошибок, так как Bash не распознает символы или переменные окружения, которые специфичны для Windows.

2. Понимание поведения set

Когда вы запускаете команду set, Bash воспринимает всё после команды как строку, которую необходимо присвоить первому позиционному параметру ($1). Например, после выполнения следующей команды:

set "abc"

вы можете проверить значение $1:

echo $1  # будет "abc"

Таким образом, в вашем случае, $1 теперь будет содержать следующую строку:

PATH=C:\Program Files\Git\bin;%USERPROFILE%\AppData\Local\Programs\Git\bin;%PATH%

3. Проверка изменений

Вы можете проверить, что никаких изменений в переменной окружения PATH не произошло, выполнив команду:

echo $PATH

Строка вывода покажет текущие значения переменной PATH вашей среды Linux, которые останутся неизменными.

4. Безопасность выполнения команды

Запуск данной команды в Bash на Linux абсолютно безопасен. Поскольку она не производит никаких действий, изменяющих среду или поведение системы, вы можете без опасений использовать её в ваших сценариях. Этим она подходит для запуска вашего скрипта как в Windows, так и в Linux, не вызывая побочных эффектов.

5. Заключение

Таким образом, команда set в данном контексте не делает ничего влияющего на вашу систему и просто работает как способ привязки текстового значения к первому позиционному параметру. Это поведение помогает создать удобный кроссплатформенный скрипт, который может вводить параметры и сохранять консистентность выполнения без каких-либо нежелательных изменений окружения в Linux.

Если у вас есть дополнительные вопросы или необходима помощь в дальнейших разработках, не стесняйтесь обращаться.

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

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