in Bash, come non includere argomenti extra in un alias?


10

Sto cercando di fare qualcosa del genere

alias ftp='echo do not use ftp. Use sftp instead.'

solo per ftpnon essere utilizzato accidentalmente. Ma l'ho notato

ftp abcd.com

farà eco al comando

do not use ftp. Use sftp instead. abcd.com

perché abcd.comè considerato un argomento per echo.

C'è un modo per fare in modo che Bash non si aggiunga abcd.comalla sostituzione o che echonon lo prenda come argomento extra? (C'è una soluzione per ogni approccio?)

Immaginai di potercela fare

alias ftp='sftp'

ma voglio solo fermare il comando tutti insieme per ricordare a me stesso di non usare ftp.


3
Principalmente puoi proibire ftpin modo diverso, ma se lo desideri, usa printfinvece di echo:printf "Do not use ftp. Use sftp instead.\n\c"
Costas,

Aggiungi echoil sftpalias? vale a dire alias ftp='echo "Do not use ftp"; sftp'. Riceverai il promemoria, pur essendo costretto a usare sftp.
Josh Jolly,

@JoshJolly Volevo dare il comando di fermarsi tutti insieme invece di lasciarlo "navigare attraverso" solo così mi verrà costantemente ricordato di non usareftp
nonopolarità

1
Si noti che gli alias sono estremamente semplici; non sono altro che semplici sostituzioni di stringhe (con l'ulteriore limitazione che (1) la sostituzione avviene solo all'inizio della stringa di comando e (2) non è ricorsiva). Non è possibile "configurare" il funzionamento di un alias oltre la definizione dell'alias stesso.
Kyle Strand,

Ehm ... scusa, gli alias sono ricorsivi. Non sono sicuro di cosa stavo pensando.
Kyle Strand,

Risposte:


18

Quando si definisce un alias, viene eseguito il comando impostato anziché quello che è stato scritto. Ciò significa che quando si esegue ftp abc.com, ciò che viene effettivamente eseguito è

echo do not use ftp. Use sftp instead abc.com

Una soluzione semplice è utilizzare una funzione anziché un alias:

ftp(){ echo 'do not use ftp. Use sftp instead'; }

In alternativa, è possibile utilizzare printfcome suggerito da Costas:

alias ftp="printf 'do not use ftp. Use sftp instead\n'"


9

Basta inserire uno spazio e il carattere di commento #alla fine della stringa di alias:

alias ftp='echo do not use ftp. Use sftp instead. #'
ftp abcd.com
do not use ftp. Use sftp instead.

Questo farà sì che i parametri vengano trattati come un commento. Non dimenticare di aggiungere uno spazio prima che #altrimenti non verrà interpretato come token separato dopo l'espansione dell'alias.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.