リモートホスト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
を使用できません私が探しているのはalias for php
like
alias php='php ( condition | true > pass file content as argument | false > pass nothing )'
そして、さらに引数をエイリアスに渡せるようにしたいと思います。
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
より正確です。もちろん、それをワンライナーとして書くこともできますが、関数を.bashrc
などに保存していると仮定すると、長さはそれほど重要ではありません。
(これは実際にはコメントですが、フォーマットが必要です。コミュニティwikiにしました)
(1)に注意してください
A && B || C
(2)とは根本的に異なります
if A; then B; else C; fi
この状況では、Aは成功したが、Bは失敗した場合。その場合、C 実行されます(1)では実行されますが、(2)では実行されません。
あなたcouldエイリアスを次のようにします。
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[@]}" "$@"
}