In Bash, posso fare EDITOR=vim command
e command
verrà eseguito con EDITOR
set to vim
, ma questo non influirà sul valore della EDITOR
shell stessa. È possibile farlo in cmd.exe
?
In Bash, posso fare EDITOR=vim command
e command
verrà eseguito con EDITOR
set to vim
, ma questo non influirà sul valore della EDITOR
shell stessa. È possibile farlo in cmd.exe
?
Risposte:
Nota che cmd /C "set "EDITOR=vim" && echo %EDITOR%"
non funzionerebbe.
Né lo farebbecmd /C "setlocal ENABLEDELAYEDEXPANSION && set "EDITOR=vim" && echo !EDITOR!"
Quale sarebbe l' /V
opzione, per abilitare l'espansione ritardata della variabile d'ambiente usando !
come delimitatore.
C:\> cmd /V /C "set EDITOR=vim&& echo !EDITOR!"
vim
Come elencati di seguito per maoizm , è cmd /V /C
, non cmd /C /V
(che non funziona)
Non riesco a pensare a nessun motivo pratico che tu abbia mai desiderato davvero nel contesto di un singolo comando
In genere, questo è necessario quando è necessario sostituire un valore utilizzato più volte in una lunga riga di comando.
Ad esempio, per distribuire un file su Nexus (in più righe per leggibilità):
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/"
Invece di dover sostituire gruppo, artefatto (usato 2 volte) e versione in una riga di comando lunga e complessa, è possibile modificarli all'inizio di detto comando. È più chiaro / semplice manipolare e modificare i valori dei parametri.
'vim'
ma 'vim '
nell'ultimo comando. Aggiungi le virgolette interne per evitare lo spazio alla fine.
cmd /v/c "..."
funziona, ma cmd /c/v "..."
fallisce - si spera che possa farti risparmiare 15 minuti
Puoi farlo in Windows come questo senza bisogno di installare nulla.
cmd /C "set EDITOR=vim && set"
Vedrai un elenco di variabili e vedrai EDITOR = vim, ora esegui di nuovo "set" e non verrà elencato.
Puoi fare più & 'per aggiungere ulteriori comandi:
cmd /C "set EDITOR=vim && do this && do that && otherstuff"
EDIT: / C esce subito dal nuovo cmd dopo l'esecuzione, se si produce un output con quello nuovo sarà comunque visibile nella finestra padre.
Puoi scegliere di usare / K nel qual caso la nuova finestra cmd rimane aperta alla fine della corsa.
set name=foo&&echo %name%
o set username=foo&&echo %username%
?
è possibile utilizzare util ported env
dal pacchetto CoreUtils in GnuWin32 http://gnuwin32.sourceforge.net/
env.exe
esiste nella variabile% PATH%env EDITOR=vim command
Ho rovesciato un file batch env.cmd
che funziona più o meno come il 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
L'unica differenza è che, a causa del modo in cui vengono cmd
analizzate, le assegnazioni di ambiente devono essere quotate, quindi il tuo comando sarebbe:
env "EDITOR=vim" command [up to 8 parameters]
Il file batch potrebbe essere elaborato per rimuovere la restrizione di 8 parametri creando la stringa di comando all'interno del for
ciclo (sarà necessaria un'espansione ritardata).
%*
come penultima riga (cioè quella dopo l' :DoCmd
etichetta) per consentire comandi utente molto lunghi?
%*
è l' elenco dei parametri originale : non è interessato da shift
(diversamente da $*
Unix).