我试图通过使用参数执行它来为我的 php 命令别名,具体取决于带有我的远程主机 IP 的文件是否存在,否则没有任何其他参数。
我用这个版本就可以使用了
#!/bin/bash
alias php="[ -f path/to/hostip ] && php -dxdebug.remote_host=\"$( < path/to/hostip )\" || php
两个问题
- 太长了(奢侈问题)
- 调用时
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
更正确。当然,您也可以将其写为一行代码,但假设您将函数保存到您的.bashrc
或此类中,那么长度应该不那么重要。
答案2
(这确实是一条评论,但需要格式化。将其制作为社区维基)
请注意 (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[@]}" "$@"
}