Как создать Windows-эквивалент этого очень маленького сценария оболочки? - PullRequest
1 голос
/ 09 ноября 2019

Я пытаюсь добиться следующего, но в файле .bat. Он выполняет все аргументы после первого, после задания пути.

# Add your local node_modules bin to the path for this command
export PATH="./node_modules/.bin:$PATH"

# execute the rest of the command
exec "$@"

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

REM Add your local node_modules bin to the path for this command
SET PATH=.\node_modules\.bin;%PATH%

1 Ответ

2 голосов
/ 09 ноября 2019

Первая командная строка может быть:

@set "PATH=%~dp0node_modules\.bin;%PATH%"

Эта командная строка добавляет к локальной PATH переменную среды в начале пути подкаталога .bin в подкаталоге node_modulesв каталоге пакетного файла вместо текущего каталога .

%~dp0 всегда расширяется путь к каталогу пакетного файла, заканчивающийся обратной косой чертой. По этой причине %~dp0 следует всегда объединять с именем папки / файла без дополнительной обратной косой черты, как здесь.

Можно было бы использовать %CD%\ вместо %~dp0, чтобы добавить путь к подкаталогу.bin в подкаталоге node_modules в текущем каталоге до локальная PATH переменная среды. Но учтите, что текущий каталог всегда может отличаться от каталога пакетных файлов и по этой причине, скорее всего, здесь не годится.

%CD% расширяется дострока пути к каталогу, не заканчивающаяся обратной косой чертой, за исключением того, что текущий каталог является корневым каталогом диска, и в этом случае %CD% расширяется до буквы диска + двоеточие + обратная косая черта. Поэтому для использования %CD% потребуется командная строка:

@if not "%CD:~-1%" == "\" (set "PATH=%CD%\node_modules\.bin;%PATH%") else set "PATH=%CD%node_modules\.bin;%PATH%"

Вторая командная строка может быть:

@%*

Эта очень короткая командная строка приводит к интерпретации всех переданных аргументовв командный файл за исключением аргумента 0 в качестве командной строки для выполнения командным процессором Windows после его анализа. См. Также: Как синтаксический анализ сценариев интерпретатора команд Windows (CMD.EXE)?

@ в начале командной строки приводит к тому, что командный процессор Windows cmd.exe обрабатывает пакетный файлне выводит командную строку после ее анализа. Командная строка с командой set и с %* больше не нуждаются @ в начале строки с @echo off в верхней части командного файла.

@echo off
set "PATH=%~dp0node_modules\.bin;%PATH%"
%*

Открыть Командная строка , запустите call /? и прочитайте справку, объясняющую, как можно ссылаться на аргументы пакетного файла в пакетном файле.

См. также SS64.com , который имеет ссылку дляКоманды Windows CMD и Linux Shell.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...