2013-06-07 14 views
9

W bashu, tak jak w ruby, nazwa programu jest podawana przez $ 0. Co to jest w rybach? Mogę wykonać następujące czynności, jeśli:Jak uzyskać nazwę programu w skrypcie powłoki?

set PROGRAM (ps --no-header -o args -p %self | egrep -o '\S+')[2] 

Ale jestem pewien, że nazwa programu musi być już gdzieś dostępna. Mogę również ustawić nazwę programu w zmiennej na punkcie pośrednim każdego programu, ale ma to problemy z utrzymaniem.

Odpowiedz

14

Aby uzyskać taki sam wynik, jak polecenie, jest to nazwa pliku skryptu, którego szukasz.

Ta informacja nie jest przechowywana w zmiennej, ale otrzymujesz ją, wysyłając zapytanie do status.

basename (status -f)  # The name of the file 
status -f     # The full path of the file 

Więcej informacji: http://fishshell.com/docs/2.0/commands.html#status

+0

To nie działa, jeśli nazwa programu jest inna niż wykonywany plik. Na przykład, jeśli polecenie jest funkcją zdefiniowaną w pliku config.fish lub pliku z dowiązaniem symbolicznym. – Thayne

4

Dla fish użyj $_ dla nazwy programu.

+1

Dzięki. Nic nie dostaję za $ _. Istnieje krótkie odwołanie do $ _ w [link] (http://fishshell.com/docs/2.0/index.html). Również w [link] (https://github.com/fish-shell/fish-shell/issues/813). Ma coś wspólnego z tytułem okna, ale nie jest to nazwa rzeczywistego programu. – user1494787

+1

Interaktywnie, jest to nazwa bieżącego polecenia, np. dla 'echo $ _' it 'zwraca' echo'. W funkcjach wciąż jest to polecenie interaktywne najwyższego poziomu, które wpisałeś (np. 'Function f; g; end; function g; echo $ _; end', a następnie wpisz' f', wydrukuje 'f'). W nieinteraktywnym skrypcie wydaje się pusty. W każdym razie nie tego, czego chcesz. –

+1

Czy istnieje lista tych specjalnych nazw zmiennych w dowolnym miejscu? (Innym może być '$ argv'.) Są one raczej trudne dla Google'a dla ... – mjs

Powiązane problemy