2013-06-07 9 views
9

In bash, come in ruby, il nome del programma è dato da $ 0. Cosa c'è nel pesce? Posso fare quanto segue se devo:Come ottenere il nome del programma in uno script fish shell?

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

Ma sono sicuro che il nome del programma deve essere già disponibile da qualche parte. Potrei anche impostare il nome del programma in variabile allo stub di ciascun programma, ma questo ha problemi di manutenzione.

risposta

14

Per ottenere lo stesso risultato del comando, è il nome file di script che si sta cercando.

Questa informazione non è memorizzata in una variabile, ma si ottiene questo interrogando status.

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

Maggiori informazioni: http://fishshell.com/docs/2.0/commands.html#status

+0

Questo non funziona se il nome del programma è diverso dal file che si sta eseguendo. Ad esempio se il comando è una funzione definita in config.fish o un file con collegamenti simbolici. – Thayne

4

Per fish utilizzare $_ per il nome del programma.

+1

Grazie. Non ottengo nulla con $ _. C'è un breve riferimento a $ _ in [collegamento] (http://fishshell.com/docs/2.0/index.html). Anche in [link] (https://github.com/fish-shell/fish-shell/issues/813). Ha qualcosa a che fare con il titolo della finestra, ma non è il nome del programma reale. – user1494787

+1

In modo interattivo, è il nome del comando corrente ad es. per 'echo $ _' it 'restituisce' echo'. Nelle funzioni, è ancora il comando interattivo di primo livello che è stato digitato (ad esempio, 'function f; g; end; function g; echo $ _; end' e quindi si digita' f', verrà stampato 'f'). In uno script non interattivo sembra essere vuoto. In ogni caso, non quello che vuoi. –

+1

C'è un elenco di questi nomi di variabili speciali ovunque? (Un altro sarebbe '$ argv'.) Sono piuttosto difficili da Google per ... – mjs

Problemi correlati