Wiersz poleceń i PATH
Gdy często pracujemy z konsolą, przydaje się, aby do najczęściej używanych programów i narzędzi dostawać się poprzez wprowadzenie jego nazwy w konsoli w dowolnej lokalizacji. Aby to działało dany program musi znajdować się w katalogu, którego ścieżka zawarta jest w zmiennej systemowej PATH, określającej listę lokalizacji jakie zostaną przeszukane przez interpreter poleceń w poszukiwaniu pliku wykonywalnego.
Innym rozwiązaniem jest trzymanie wszystkich aplikacji i plików exe w jednym katalogu co w przypadku systemu Windows jest chybionym pomysłem.
Pozostaje korzystanie z path, ale ustawianie i modyfikowanie tej zmiennej systemowej w tradycyjny sposób jest dosyć męczące i nieporęczne.
Możemy wykorzystać polecenie path lub set linii poleceń.
Idealnym rozwiązaniem jest trzymanie wszystkich ścieżek w jednym pliku i ustawianie zmiennej path przy uruchomieniu konsoli. Zmiany zmiennej path będą tylko ważne dla danej instancji wiersza poleceń i dla czasu jego życia - do zakończenia jego działania.
Dla mnie jest to idealne bo właśnie ułatwić ma to prace z konsoli i uniezależnić różne skrypty i makefilsy od wszelakich bezwzględnych, czy innych sztuczek ze ścieżkami zaszytymi w kodzie tych skryptów.
Warto wspomnieć, że nie należy wszystkiego „pakować” w nasz plik ścieżek, podstawowe ścieżki odwołujące się do systemowych miejsc, lub innych, gdzie umieszczamy DLLki naszych bibliotek warto pozostawić w głównym systemowym miejscu, aby były widoczne przez cały system i nie wynikały różne problemy ze znalezieniem wymaganych bibliotek przy uruchamianiu aplikacji.
Wróćmy do naszego rozwiązania z plikiem ścieżek.
Najlepiej, aby w pliku jedna linia odzwierciedlała jedną ścieżkę, oraz aby linie puste i rozpoczynające się od ; (przydatne dla komentarzy) były pomijane:
C:\Perl64\bin C:\Perl64\site\bin ; toolsy C:\tools\sed C:\tools\ZIP C:\Program Files (x86)\Bakefile C:\Program Files (x86)\wxFormBuilder ; SVN/CVS C:\Program Files\SlikSvn\bin\ C:\Program Files\TortoiseSVN\bin C:\Program Files (x86)\CVSNT |
Skrypt parsujący ten plik (C:\path.txt) i ustawiający zmienną path jest, o dziwo, bardzo prosty:
@echo off for /f "eol=; delims=" %%i in (C:\path.txt) do set path=!path!;%%i echo on |
Aby skrypt ten zadziałał interpreter poleceń musi zostać uruchomiony z przełącznikiem /v:on włączającym opóźnione rozwijanie zmiennych środowiskowych. Wtedy ciąg !path! będzie rozwijany w czasie wykonania do aktualnej wartości zmiennej systemowej path.
Bez tego, przy użyciu %path%, zmienna ta byłaby rozwinięta tylko raz przy czytaniu instrukcji for, efektem czego byłoby dodanie tylko ostatniej ścieżki z pliku do zmiennej path. Więcej informacji na ten temat można znaleźć w helpie interpretera poleceń (cmd) i polecenia set.
Warto dodać sobie odpowiedni skrót do QuickLaunch do szybkiego i prostego uruchamiania konsoli wraz z automatycznym uruchomieniem naszego skryptu przy stracie. Elementem docelowym tego skrótu będzie:
%ComSpec% /v:on /k C:\setvar.bat |
A w polu „Rozpocznij w” możemy wpisać ścieżkę jaka zostanie ustawiona jako bieżącą po uruchomieniu konsoli, można wykorzystać zmienne systemowe, np.
%HOMEDRIVE%%HOMEPATH% |
dla ustawienia naszego katalogu domowego.
Innym, bardzo przydatnym ułatwieniem jest dodanie do menu kontekstowego folderu pozycji uruchamiającej wiersz poleceń wraz z ustawieniem jako bieżącego katalogu folderu na którym rozwinęliśmy menu.
Aby dodać taką pozycje do menu wystarczy dodać kilka odpowiednich kluczy i wartości w rejestrze dla gałęzi:
HKEY_ LOCAL_MACHINE/Software/Classes/Folder/shell |
Dokładniej to dla podanej gałęzi należy dodać nowy klucz o dowolnej nazwie, np. cmd. Domyślna wartość tego klucza określa nazwę pozycji menu, więc wpisujemy „Wiersz poleceń”.
Następnie dodajemy kolejny klucz, tym razem do „cmd”, o nazwie „Command„, którego wartość będzie akcją jaka zostanie wykonana po wybraniu danej pozycji menu, w najprostszym wypadku byłoby to:
cmd.exe /k pushd %L |
ale my chcemy, wykorzystać nasz nowy skrypcik z ustawianiem zmiennej path, więc wartość tego klucza będzie wyglądać następująco:
cmd.exe /v:on /k pushd %L & C:\setvar.bat |
Tym sposobem ułatwiliśmy sobie nieco korzystanie z naszej konsoli, nie musimy się męczyć z ustawianiem bieżącego katalogu, co czasem przy trochę zagnieżdżonych katalogach jest nieco flustrujące ;)
MalDevBlog » Visual Studio Command Prompt:
23/05/2009 @ 15:36:28 | #1
[...] dodający do zmiennej PATH dodatkowe ścieżki znajdujące się w innym pliku, pisałem o tym notce Wiersz poleceń i PATH. Informacje o [...]
MalDevBlog » Skryptowanie Windowsa: powłoka:
03/06/2009 @ 20:57:40 | #2
[...] Chyba nie trzeba wspominać o tym, aby wszelkie narzędzie jakie chcemy mieć dostępne z wiersza poleceń bez babrania się z katalogami, znajdowały się w jednej z lokalizacji, na jakie wskazuje zmienna środowiskowa PATH? Do łatwego zarządzania zawartością zmiennej PATH można wykorzystać mój prosty skrypcik również w powłoce, o którym pisałem w notce Wiersz poleceń i PATH. [...]