2016-03-27 7 views
2

Googleでこれを調べましたが、これまでに誰もこれを尋ねていないようです。エイリアスを設定してプログラムのコマンドライン引数として使用できる方法はありますか?コマンドラインパラメータとしてbashエイリアスを使用する方法

ssh myserver 

myserver例えば

が私のサーバー一般的に

+1

シェルは、このような問題の環境変数、つまり 'myServer = 192.168.0.1'を使用します。 'ssh" $ myServer "'のように参照されます。一般に、エイリアス定義で時間を無駄にしないで、再利用可能なサービスを提供する '関数'を書くことを学びます。がんばろう。 – shellter

+0

@shellter:_environment_変数ではなく_shell_変数を意味することを除いて、良いアドバイス。 – mklement0

+1

@ mklement0:そうですね、あなたは意味論について正しいです。明確にしてくれてありがとう!皆さんお元気で。 – shellter

答えて

4

のIPアドレスになるように定義され、いや、あなたのシェルは、あなたのためのコマンドラインパラメータを置き換えることはありません。

特定のの例では、実際にはいくつかの選択肢があります。あなたの~/.ssh/configファイルを編集し、エントリを追加するようにできます。

Host myserver 
    HostName 1.2.3.4 

そして、あなたはssh myserverを実行したときに、今、sshは実際に1.2.3.4をホストに接続します。

また見え~/.hostsファイルを維持することができるように:システムのリゾルバを使用しています

myserver 1.2.3.4 

今は何も - sshを含んで - 1.2.3.4myserverを変換します。

4

実際には方法があります。しかし、2つのエイリアスを定義する必要があります。

まず:Bashのマニュアルの状態(LESS=+/'^ALIASES' man bash

ALIASES 別名値の最後の文字が空白の場合、エイリアスに続く次のコマンドワードはまた、エイリアス展開のためにチェックされています。

documented in POSIX spec。リンクについてThanks to @gniourf_gniourf

単語を置き換える別名の値が<空白>で終わる場合、シェルは別名置換については、次のコマンドワードをチェックしなければなりません。このプロセスは、有効なエイリアスではない、またはエイリアス値が<ブランク>で終わらない単語が見つかるまで続きます。


あなたはこれら二つの別名を定義するのであれば、(末尾のスペースに保管して下さい):別名を持つ

$ alias ssh='ssh ' 
$ alias myserver='192.168.0.1' 
$ set -x 
$ ssh myserver 
+ ssh 192.168.0.1 

クリア:

$ unalias ssh 
$ unalias myserver 

注1kshおよびzshマニュアルにも記載されています

注2dash(文書が見つかりません)で正しく動作していることがテストされています。

Wikipedia entry on "alias" chaining

+1

[この動作はPOSIXで指定されています](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_03_01):_単語を置き換えるエイリアスの値がで終わる場合、シェルはエイリアス置換の次のコマンドワードを確認してください。有効なエイリアスではない、またはエイリアス値がで終わらない単語が見つかるまで、このプロセスは続行されます._ –

+0

@gniourf_gniourfコメントとリンクをありがとう。 –

1

larsks' helpful answer簡潔な説明とssh使用に固有の役に立つソリューションが含まれています。より一般的な説明とそれを補完する:BinaryZebra's helpful answerで説明別名チェーンの例外を除いて

エイリアスは、一般的にのみコマンドとしてを使用することができ、少なくとも直接ではなく、引数コマンドではありません。

するコマンドとして非リテラル(値のプレースホルダ)を使用引数、あなたは以下のオプション(例えば、ブレース展開をグロブ、または算術展開などの他のshell expansionsを脇に残して)持っている:

  • を参照番号変数;例えば、myserver=1.2.3.4として以前に定義された、例えば、ssh "$myserver"である。 ~/.bashrcにあります。

  • command substitutionを使用してください。すなわち、stdout出力が引数値として機能するコマンド。例えば:ssh "$(echo '1.2.3.4')"

しかし、あなたはまた、定義済みの引数を指定して、コマンドのラッパーを提供するために、シェル機能を使用することができます。例えば、

# Define the function, typically in ~/.bashrc 
# "[email protected]" safely passes all arguments through to `ssh`. 
# (If the arguments must partly go *before* the predefined argument, more work is needed.) 
sshmyserver() { 
    ssh 1.2.3.4 "[email protected]" 
} 

# Use the function, optionally with arguments. 
sshmyserver