No Bash, eu posso fazer EDITOR=vim command
e command
será executado com EDITOR
set como vim
, mas isso não afetará o valor do EDITOR
próprio shell. É possível fazer isso cmd.exe
?
No Bash, eu posso fazer EDITOR=vim command
e command
será executado com EDITOR
set como vim
, mas isso não afetará o valor do EDITOR
próprio shell. É possível fazer isso cmd.exe
?
Respostas:
Observe que cmd /C "set "EDITOR=vim" && echo %EDITOR%"
não funcionaria.
Nemcmd /C "setlocal ENABLEDELAYEDEXPANSION && set "EDITOR=vim" && echo !EDITOR!"
O que seria a /V
opção, para permitir a expansão atrasada da variável de ambiente usando !
como delimitador.
C:\> cmd /V /C "set EDITOR=vim&& echo !EDITOR!"
vim
Como observado abaixo por maoizm , é cmd /V /C
, não cmd /C /V
(que não funciona)
Não consigo pensar em nenhuma razão prática para você realmente querer isso dentro do contexto de um único comando
Normalmente, você precisa disso quando precisar substituir um valor usado várias vezes em uma longa linha de comando.
Por exemplo, para implantar um arquivo no Nexus (em várias linhas para facilitar a leitura):
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/"
Em vez de precisar substituir o grupo, o artefato (usado 2 vezes) e a versão em uma linha de comando longa e complexa, você pode editá-los no início do referido comando. É mais claro / fácil manipular e alterar os valores dos parâmetros.
'vim'
mas 'vim '
no último comando. Adicione as aspas internas para evitar o espaço no final.
cmd /v/c "..."
funciona, mas cmd /c/v "..."
não - espero que ele pode poupar 15 minutos
Você pode fazê-lo em janelas como essa, sem necessidade de instalar nada.
cmd /C "set EDITOR=vim && set"
Você verá uma lista de variáveis e verá EDITOR = vim, agora execute "set" novamente e não será listado.
Você pode executar vários && 's para adicionar comandos adicionais:
cmd /C "set EDITOR=vim && do this && do that && otherstuff"
EDIT: / C sai do novo cmd imediatamente após a execução, se você produzir saída com o novo, ele ainda estará visível na janela pai.
Você pode optar por usar / K; nesse caso, a nova janela do cmd permanece aberta no final da execução.
set name=foo&&echo %name%
ou set username=foo&&echo %username%
?
você pode usar o env
utilitário portado do pacote CoreUtils no GnuWin32 http://gnuwin32.sourceforge.net/
env.exe
existe a variável% PATH%env EDITOR=vim command
Eu bati um arquivo em lotes env.cmd
que funciona mais ou menos como o env
comando Linux : -
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
A única diferença é que, devido à maneira como cmd
analisa, as atribuições do ambiente precisam ser citadas; portanto, seu comando seria:
env "EDITOR=vim" command [up to 8 parameters]
O arquivo em lote pode ser elaborado para remover a restrição de 8 parâmetros, construindo a cadeia de comandos dentro do for
loop (será necessária expansão atrasada).
%*
como a penúltima linha (ou seja, a que segue o :DoCmd
rótulo) para permitir comandos de usuário muito longos?
%*
é a lista de parâmetros original : ela não é afetada por shift
(ao contrário $*
do Unix).