w Bash, jak nie dołączać dodatkowych argumentów do aliasu?

10

Próbuję zrobić coś takiego

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

tak, ftpaby nie zostało przypadkowo wykorzystane. Ale zauważyłem to

ftp abcd.com

spowoduje echo polecenia

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

ponieważ abcd.comuważa się, że jest argumentem echo.

Czy istnieje sposób, aby Bash nie dodawał abcd.comdo podstawienia lub echonie traktował tego jako dodatkowych argumentów? (Czy istnieje rozwiązanie dla każdego podejścia?)

Myślałem, że dam radę

alias ftp='sftp'

ale chcę po prostu zatrzymać polecenie, aby przypomnieć sobie, żebym nie używał ftp.

niepolarność
źródło
3
Przeważnie możesz zakazać ftpw inny sposób, ale jeśli chcesz to zrobić - użyj printfzamiast echo:printf "Do not use ftp. Use sftp instead.\n\c"
Costas
Dodać echodo sftpaliasu? tj alias ftp='echo "Do not use ftp"; sftp'. Otrzymasz przypomnienie, będąc jednocześnie zmuszonym do korzystania sftp.
Josh Jolly
@JoshJolly Chciałem wydać polecenie zatrzymania wszystkiego razem, zamiast pozwolić mu „przepłynąć” tylko po to, aby ciągle mi przypominano, aby nie używaćftp
nonpolarity
1
Pamiętaj, że aliasy są niezwykle proste; są niczym innym jak prostym podstawieniem łańcucha (z dodatkowymi ograniczeniami, że (1) podstawienie występuje tylko na początku łańcucha polecenia, a (2) nie jest rekurencyjne). Nie ma sposobu na „skonfigurowanie” działania aliasu poza definicją samego aliasu.
Kyle Strand
Er ... przepraszam, aliasy rekurencyjne. Nie jestem pewien, co myślałem.
Kyle Strand,

Odpowiedzi:

18

Po zdefiniowaniu aliasu ustawione polecenie jest uruchamiane zamiast napisanego. Oznacza to, że po uruchomieniu ftp abc.comjest to, co jest faktycznie wykonywane

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

Prostym rozwiązaniem jest użycie funkcji zamiast aliasu:

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

Alternatywnie możesz użyć printfzgodnie z sugestią Costasa:

alias ftp="printf 'do not use ftp. Use sftp instead\n'"
terdon
źródło
16
alias ftp='echo do not use ftp. Use sftp instead. # '
Hauke ​​Laging
źródło
7
+1. Jednak w jakiś sposób przypomina mi to zastrzyki SQL: ') Słodka sztuczka.
John WH Smith
9

Wystarczy umieścić spację i znak komentarza #na końcu ciągu aliasu:

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

Spowoduje to, że parametry będą traktowane jako komentarz. Po prostu nie zapomnij dodać spacji wcześniej, w #przeciwnym razie nie będzie interpretowane jako osobny token po rozwinięciu aliasu.

pabouk
źródło