2013-01-03 15 views
5

Come posso scrivere una funzione che Bash ignora $ nel primo dei comandi? Lo voglio perché a volte quando incollo un comando dal web include uno $ in primo carattere.

$ ls dovrebbe fare ls o $ grep 'foo' dovrebbe fare grep 'foo'.

Questo non funziona perché $ non è un nome di funzione valido.

function $ { 
    ... 
} 
+5

non copiarlo per iniziare? che '$' è usato per indicare il prompt della shell. –

+1

@MarcB Sono troppo pigro per farlo. Preferisco scrivere un programma e semplificarmi la vita – Mohsen

risposta

9

Creare un file chiamato $ qualche parte sul vostro $PATH, per esempio in ~/bin:

cd ~/bin 
cat <<'EOF' > \$ 
#!/bin/sh 
"[email protected]" 
EOF 

renderlo eseguibile:

chmod 755 \$ 

e godersi la follia:

$ ls -l 
total 92 
-rwxr-xr-x 1 thomas thomas 13 Jan 3 19:09 $ 
$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ls 
total 92 
-rwxr-xr-x 1 thomas thomas 13 Jan 3 19:09 $ 
+2

+1 bella idea. Dovresti usare '" $ @ "' comunque, per gestire correttamente gli argomenti con spazi bianchi. Ho pensato che una funzione sarebbe meglio di uno script, ma bash non consente '$' come nome di una funzione. –

+0

Grazie, risolto. – Thomas

+1

Un altro suggerimento: inserire virgolette singole attorno al primo delimitatore di heredoc. Quella in effetti singola cita l'intero heredoc e non dovrai sfuggire alle variabili: 'cat '$'' –

Problemi correlati