Wiersz poleceń i PATH

31 stycznia 2009

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 ;)

Podobne notatki:

Może zainteresują Cię również następujące, pododbne notatki:

Komentarze i nawiązania (2)

Kanał RSS komentarzy

  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 [...]

  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. [...]

Dodaj swój komentarz

Możesz użyć tych tagów XHTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Jeśli chcesz wstawić kilku linijkowy fragment kodu, użyj tagów <pre lang="x"></pre> (gdzie x język kodu np. cpp, perl, html). W ten sposób kod zostanie odpowiednio sformatowany i pokolorowany przez system.

Uwaga!

Na tym blogu działa system cache oraz filtr antyspamowy. Twój komentarz może być widoczny na stronie z pewnym opóźnieniem. Proszę o cierpliwość. Jeśli utraciłeś już wszystkie jej zasoby poinformuj mnie o tym, być może system uznał Cię za spamera ;)