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.


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'"


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.