私のリモートホストのIPを持つファイルが存在するかどうかに応じてパラメータを使用して実行し、それ以外の場合は他のパラメータなしでPHPコマンドを実行してエイリアスを指定しようとしています。
このバージョンが利用可能です。
#!/bin/bash
alias php="[ -f path/to/hostip ] && php -dxdebug.remote_host=\"$( < path/to/hostip )\" || php
2つの質問
- 長すぎる(贅沢問題)
- 呼び出すと、追加
php path/to/any/script
のパラメータはPHP呼び出しに渡されません。
関数を試してみましたが、問題#2が修正されました。
#!/bin/bash
function phpx {
if [ -f path/to/hostip ]; then
php -dxdebug.remote_host="$( < path/to/hostip )" "$@"
else
php "$@"
fi
}
しかし、私はまだ問題があります。
- もっと長く(ラグジュアリー問題)
php
関数名のエイリアスとしては使用できません。
私が探しているのはニックネームphp
いいね
alias php='php ( condition | true > pass file content as argument | false > pass nothing )'
エイリアスに追加のパラメータを渡すことができるようにしたいです。
答え1
help command
:
command: command [-pVv] command [arg ...]
Execute a simple command or display information about commands.
したがって、command php "$@"
関数内で実行すると、関数の再呼び出しを回避できます。または/usr/bin/php
正しいパスを知る必要があります。
[ condition ] && php args.. || php other args
関数内でこのトリックを引き続き使用できますが、php
最初のphp
コマンドが失敗した場合は後者のコマンドも実行されるため、if .. then .. else
より正確です。もちろん、これを1行のコードで書くこともできますが、関数を自分または.bashrc
このクラスに保存すると仮定すると、長さはそれほど重要ではありません。
答え2
(これは実際にコメントですが、フォーマットを指定する必要があります。コミュニティWikiで作成してください。)
参考(1)
A && B || C
(2)と根本的に異なる
if A; then B; else C; fi
この場合:Aは成功しましたが、Bは失敗しました。このような場合はC実行できます(1)にはありますが(2)にはありません。
答え3
あなたできるエイリアスを次のようにしてください。
alias php='_php_opts=(); [[ -f /path/to/hostip ]] && _php_opts+=( -dxdebug.remote_host="$( < path/to/hostip )" ); php "${_php_opts[@]}"`
しかし、グローバル変数の名前空間を汚染することなく読み取り可能なものを作成できますが、なぜそれを行うのですか?
php() {
local _php_opts=()
[[ -f /path/to/hostip ]] && _php_opts+=( -dxdebug.remote_host="$( < path/to/hostip )" )
command php "${_php_opts[@]}" "$@"
}