Wie kann man in Bash keine zusätzlichen Argumente in einen Alias ​​aufnehmen?

10

Ich versuche so etwas zu tun

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

nur damit das ftpnicht versehentlich benutzt wird. Aber das habe ich bemerkt

ftp abcd.com

bewirkt, dass der Befehl wiedergegeben wird

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

weil das abcd.comals Argument für genommen wird echo.

Gibt es eine Möglichkeit, Bash dazu abcd.comzu bringen, die Substitution nicht zu ergänzen oder echonicht als zusätzliche Argumente zu verwenden? (Gibt es für jeden Ansatz eine Lösung?)

Ich nahm an, ich könnte es schaffen

alias ftp='sftp'

aber ich möchte nur, dass der Befehl alle zusammen stoppt, um mich daran zu erinnern, ihn nicht zu verwenden ftp.

Unpolarität
quelle
3
Meistens können Sie ftpauf andere Weise verbieten , aber wenn Sie dies möchten - verwenden Sie printfanstelle von echo:printf "Do not use ftp. Use sftp instead.\n\c"
Costas
Fügen Sie die echozum sftpAlias? dh alias ftp='echo "Do not use ftp"; sftp'. Sie erhalten die Erinnerung, müssen aber auch verwenden sftp.
Josh Jolly
@JoshJolly Ich wollte den Befehl geben, alle zusammen anzuhalten, anstatt ihn " ftp
durchsegeln
1
Beachten Sie, dass Aliase extrem einfach sind. Sie sind nichts anderes als eine einfache Zeichenfolgenersetzung (mit den zusätzlichen Einschränkungen, dass (1) die Ersetzung nur am Anfang der Befehlszeichenfolge erfolgt und (2) sie nicht rekursiv ist). Es gibt keine Möglichkeit, die Funktionsweise eines Alias ​​über die Definition des Alias ​​selbst hinaus zu "konfigurieren".
Kyle Strand
Äh ... Entschuldigung, Aliase sind rekursiv. Ich bin mir nicht sicher, was ich dachte.
Kyle Strand

Antworten:

18

Wenn Sie einen Alias ​​definieren, wird der von Ihnen festgelegte Befehl anstelle des von Ihnen geschriebenen ausgeführt. Dies bedeutet, dass beim Ausführen ftp abc.comtatsächlich Folgendes ausgeführt wird

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

Eine einfache Lösung besteht darin, eine Funktion anstelle eines Alias ​​zu verwenden:

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

Alternativ können Sie printfwie von Costas vorgeschlagen Folgendes verwenden:

alias ftp="printf 'do not use ftp. Use sftp instead\n'"
terdon
quelle
16
alias ftp='echo do not use ftp. Use sftp instead. # '
Hauke ​​Laging
quelle
7
+1. Aber irgendwie erinnert mich das an SQL-Injektionen: ') Süßer Trick.
John WH Smith
9

Fügen Sie einfach ein Leerzeichen und das Kommentarzeichen #am Ende der Alias-Zeichenfolge ein:

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

Dadurch werden die Parameter als Kommentar behandelt. Vergessen #Sie jedoch nicht, vorher ein Leerzeichen hinzuzufügen, da es sonst nach der Alias-Erweiterung nicht als separates Token interpretiert wird.

Pabouk
quelle