こんにちは、私はこれを持っています。~/.bash_profile
export GOPATH="$HOME/go_projects"
export GOBIN="$GOPATH/bin"
program(){
$GOBIN/program $1
}
だから私はそれを行うことができますprogram "-p hello_world -tSu"
。引用符を使用せずにカスタムフラグを使用してプログラムを実行する方法はありますか?これにより、対応するprogram -p hello_world -tSu
フラグのみが使用され、-p
スペースの後ろのすべてのエントリは無視されます。
答え1
program
シェル関数は、"$@"
関数に提供されているすべてのコマンドライン引数のリストを参照するために使用されます。引用符を使用すると、与えられた各コマンドライン引数がprogram
個別に引用されます(通常は必要に応じて)。
program () {
"$GOBIN"/program "$@"
}
これにより、program
次のように呼び出すことができます。
program -p hello_world -tSu
hello world
または代わりに合格したい場合はhello_world
、
program -p 'hello world' -tSu
ご存知のように、usingは$1
最初のコマンドライン引数だけを参照します(そして$2
2番目のものも参照します)。値は$1
さらにスペースに分割され、拡張が引用されていないため、各結果文字列はファイル名のグロービングを受けます。これにより、空白またはファイル名のグロービングパターンを含む引数が関数に誤って渡されます。
答え2
"$@"
Kusalanandaの答えに従って、関数/スクリプトが受け取ったすべての引数を渡す方法を提供することです。
$GOBIN
しかし、goプログラム内でフォルダを使用しているようであれば、PATHにフォルダを追加する方が良いと思います。
export GOPATH="$HOME/go_projects"
export GOBIN="$GOPATH/bin"
export PATH="$PATH:$GOBIN"
これにより、$GOBIN
名前だけを入力すると、その中に保存されているすべてのプログラムを実行できます(既存のプログラムと同じ名前を除く)。追加$ GOBINを$ PATHとして指定すると、このプログラムが選択されます。最後)。
PS:完全性を期すために関数の代わりにエイリアスを使用する3番目のオプションがあります。次の場所に配置できます.bashrc
。
alias program="$GOBIN/program"
答え3
私に役立つのは次のとおりです。
m() {
args="$@"
usql mysql://root@localhost:3306 -c $args
}
デフォルトでは、次のコマンドを実行できるように、コマンドの最後に引用符で囲まれた一連のパラメーターを入れます。
m show databases;
実際に走った
usql mysql://root@localhost:3306 -c "show databases;"