コマンドの一部としてスペースを含むBashエイリアス


11

エイリアス自体にスペースがあるbashエイリアスを作成しようとしています。

考え方は、エイリアス(つまりcon)はの略ですsudo openvpn --config /path/to/my/openvpn/configs/conエイリアスを使用すると、読み取り可能なコマンドになります。

すなわち: `con uk.conf` == `sudo openvpn --config /path/to/my/openvpn/configs/uk.conf`

次のようにエイリアスを宣言できないことを理解しています con ="sudo openvpn --config /path/to/my/openvpn/configs/"。このシナリオではbash関数は機能しますか?私はそれについて聞いたことがありませんが、このマイナーな問題の解決策を研究するとき。

回答:


12

はい、関数を使用する必要があります。パラメータを追加する場合、エイリアスは機能します。エイリアスに指定された引数は、エイリアスプログラムに引数として渡されますが、そこに単に追加されるのではなく、個別のパラメータとして渡されます。説明する:

$ alias foo='echo bar'
$ foo
bar
$ foo baz
bar baz

ご覧のとおり、エコーされたのはでbar bazあり、そうではありませんでしたbarbaz。既存のパラメーターに渡す値を連結したいので、次のようなものが必要になります。

function com(){ sudo openvpn --config /path/to/my/openvpn/configs/"$@"; }

上記の行をに追加する~/.bashrcと、準備が整います。


4
"$@"代わりに使用"$1"して、後続の引数も通過させることができます。(一般的なコメント、おそらくここの特定のケースとは無関係です)
Toby Speight

@TobySpeight D'oh!私はそれを考えるべきだった。ありがとう、編集。
terdon

1
明確にするためだけに@TobySpeightは、それはcom uk.conf -something elseに変換されることを意味しsudo openvpn --config /path/to/my/openvpn/configs/uk.conf -something elseますか?
TMH、2015

4
@TomHartはい。$@指定されたすべてのパラメータが含まれています。$ *と$ @の違いは何ですか?を参照してください
terdon
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.