В Bash я могу выполнить EDITOR=vim command
и command
будет выполняться с установленным для EDITOR
значением vim
, но это не повлияет на значение EDITOR
в самой оболочке. Возможно ли это сделать в cmd.exe
?
4 ответа
Вы можете сделать это в Windows, как это, не нужно ничего устанавливать.
cmd /C "set EDITOR=vim && set"
Вы увидите список переменных и увидите EDITOR = vim, теперь снова запустите "set", и его не будет в списке.
Вы можете сделать несколько && для добавления дополнительных команд:
cmd /C "set EDITOR=vim && do this && do that && otherstuff"
РЕДАКТИРОВАТЬ:/C выходит из нового cmd сразу после запуска, если вы производите вывод с новым, он все равно будет виден в родительском окне.
Вы можете использовать /K, и в этом случае новое окно cmd остается открытым в конце цикла.
Обратите внимание, что cmd /C "set "EDITOR=vim" && echo %EDITOR%"
не будет работать.
Также cmd /C "setlocal ENABLEDELAYEDEXPANSION && set "EDITOR=vim" && echo !EDITOR!"
Что было бы параметром /V
, чтобы включить отложенное расширение переменной среды с помощью !
в качестве разделителя.
C:\> cmd /V /C "set EDITOR=vim&& echo !EDITOR!"
vim
Как отметил ниже маоизм, это cmd /V /C
, а не cmd /C /V
(который не будет работать)
Я не могу придумать ни одной практической причины, по которой вы когда-либо захотите этого в контексте одной команды
Как правило, это необходимо, когда вам нужно заменить значение, используемое несколько раз в длинной командной строке.
Например, чтобы развернуть файл в Nexus (в несколько строк для удобства чтения):
cmd /v /c "set g=com.agroup&& set a=anArtifact&& set v=1.1.0&& \
mvn deploy:deploy-file -Dfile=C:\path\!a!-!v!.jar \
-Dpackaging=jar -DgroupId=!g! -DartifactId=!a! -Dversion=!v! \
-DrepositoryId=nexus
-Durl=http://myserver/nexus/content/repositories/my-repo/"
Вместо того, чтобы заменять группу, артефакт (используется 2 раза) и версию в длинной и сложной командной строке, вы можете редактировать их в начале указанной команды. Проще / проще манипулировать и изменять значения параметров.
вы можете использовать портированный util env
из пакета CoreUtils в GnuWin32 http://gnuwin32.sourceforge.net/
- Настройте это
- Проверьте, какой каталог с
env.exe
существует в переменной% PATH% - Используйте тот же способ, что и в Linux-версии
env EDITOR=vim command
Я поднял пакетный файл env.cmd
который работает более или менее как команда Linux env
:
echo off
setlocal
for %%f in (%*) do (
echo %%f|find "=" >nul:
if errorlevel 1 goto DoCmd
set %%f
shift
)
:DoCmd
%1 %2 %3 %4 %5 %6 %7 %8 %9
endlocal
Единственное отличие состоит в том, что из-за того, как cmd
анализирует, назначения среды должны быть заключены в кавычки, поэтому ваша команда будет выглядеть так:
env "EDITOR=vim" command [up to 8 parameters]
Пакетный файл может быть разработан, чтобы снять ограничение на 8 параметров, создав командную строку в цикле for
(потребуется отложенное расширение).