バッシュで、エイリアスに余分な引数を含めない方法は?


10

私は次のようなことをしようとしています

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

ftp誤って使用されることはありません。しかし、私はそれに気づきました

ftp abcd.com

コマンドをエコーさせます

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

ためabcd.comの引数であると解釈されますecho

Bashをabcd.com置換に追加しないようにする方法、またはechoそれを追加の引数として使用しないようにする方法はありますか?(各アプローチの解決策はありますか?)

できると思った

alias ftp='sftp'

しかし、コマンドを一緒に停止させて、使用しないように気づかせたいだけですftp


3
ほとんどの場合、あなたは禁止することができftp、別の方法で、しかし、あなたはそうしたい場合-使用printfの代わりに、echoprintf "Do not use ftp. Use sftp instead.\n\c"
コスタス

追加echosftp別名?すなわちalias ftp='echo "Do not use ftp"; sftp'。また、使用を強制されている間、リマインダーを取得しますsftp
Josh Jolly

@JoshJolly使用しないことを常に思い出させるために、コマンドを「帆走」させるのではなく、一緒に停止するようにコマンドを作成したかったftp
非極性

1
エイリアスは非常に単純であることに注意してください。これらは単なる文字列置換にすぎません((1)置換がコマンド文字列の先頭でのみ発生する、および(2)再帰的でないという追加の制限があります)。エイリアスの定義を超えてエイリアスがどのように機能するかを「構成」する方法はありません。
カイルストランド

ええと...申し訳ありませんが、エイリアス再帰的です。私が何を考えていたかわからない。
カイルストランド2014

回答:


18

エイリアスを定義すると、作成したコマンドではなく、設定したコマンドが実行されます。つまり、を実行するとftp abc.com、実際に実行されるのは

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

簡単な解決策は、エイリアスの代わりに関数を使用することです:

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

または、printfCostasの提案に従って使用することもできます。

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


9

#エイリアス文字列の最後にスペースとコメント文字を置くだけです:

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

これにより、パラメーターがコメントとして扱われます。スペースを追加する前にスペースを追加することを忘れないでください。#そうしないと、エイリアスの展開後に別のトークンとして解釈されません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.