W Bash mogę zrobić EDITOR=vim command
i command
będę działać z EDITOR
ustawionym na vim
, ale nie wpłynie to na wartość EDITOR
samej powłoki. Czy można to zrobić w cmd.exe
?
W Bash mogę zrobić EDITOR=vim command
i command
będę działać z EDITOR
ustawionym na vim
, ale nie wpłynie to na wartość EDITOR
samej powłoki. Czy można to zrobić w cmd.exe
?
Odpowiedzi:
Pamiętaj, że cmd /C "set "EDITOR=vim" && echo %EDITOR%"
to nie zadziała.
Nie zrobiłbym tegocmd /C "setlocal ENABLEDELAYEDEXPANSION && set "EDITOR=vim" && echo !EDITOR!"
Jaką /V
opcją byłoby włączenie opóźnionego rozszerzania zmiennych środowiskowych za pomocą !
ogranicznika.
C:\> cmd /V /C "set EDITOR=vim&& echo !EDITOR!"
vim
Jak wspomniano poniżej przez maoizm , to jest cmd /V /C
, nie cmd /C /V
(co nie działa)
Nie mogę wymyślić żadnego praktycznego powodu, dla którego kiedykolwiek chciałbyś tego w kontekście jednego polecenia
Zazwyczaj jest to potrzebne, gdy trzeba zastąpić wartość używaną wielokrotnie w długim wierszu polecenia.
Na przykład, aby wdrożyć plik w Nexusie (w wielu wierszach dla czytelności):
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/"
Zamiast konieczności zastępowania grupy, artefaktu (używanego 2 razy) i wersji w długim i złożonym wierszu poleceń, możesz edytować je na początku tego polecenia. Przejrzystsze / łatwiejsze do manipulowania i zmiany wartości parametrów.
'vim'
ale 'vim '
na ostatnim poleceniu. Dodaj cytaty wewnętrzne, aby na końcu uniknąć spacji.
cmd /v/c "..."
działa, ale cmd /c/v "..."
kończy się niepowodzeniem - mam nadzieję, że może zaoszczędzić 15 minut
Możesz to zrobić w systemie Windows, bez potrzeby instalowania czegokolwiek.
cmd /C "set EDITOR=vim && set"
Zobaczysz listę zmiennych i zobaczysz EDITOR = vim, teraz uruchom ponownie „set” i nie będzie na liście.
Możesz dodać wiele znaków &&, aby dodać dodatkowe polecenia:
cmd /C "set EDITOR=vim && do this && do that && otherstuff"
EDYCJA: / C kończy pracę z nowym cmd od razu po uruchomieniu, jeśli utworzysz dane wyjściowe przy użyciu nowego, nadal będzie ono widoczne w oknie nadrzędnym.
Możesz zdecydować się na użycie / K, w którym to przypadku nowe okno cmd pozostaje otwarte na końcu przebiegu.
set name=foo&&echo %name%
czy set username=foo&&echo %username%
?
możesz użyć przeniesionego narzędzia env
z pakietu CoreUtils w GnuWin32 http://gnuwin32.sourceforge.net/
env.exe
istnieje zmienna% PATH%env EDITOR=vim command
Podniosłem plik wsadowy, env.cmd
który działa mniej więcej tak, jak env
polecenie 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
Jedyną różnicą jest to, że ze względu na sposób cmd
analizowania przypisania środowiska muszą być cytowane, więc twoje polecenie będzie:
env "EDITOR=vim" command [up to 8 parameters]
Plik wsadowy można opracować w celu usunięcia ograniczenia 8-parametrowego poprzez utworzenie ciągu poleceń w for
pętli (konieczne będzie opóźnione rozszerzenie).
%*
jako przedostatniej linii (tj. Następnej po :DoCmd
etykiecie), aby pozwolić na bardzo długie polecenia użytkownika?
%*
jest to oryginalna lista parametrów: nie ma na nią wpływu shift
(inaczej niż $*
w Uniksie).