我有一组作为bash函数实现的命令行工具,例如:
function sf
{
sftp $(svr $1)
}
其中svr
是另一个将短名称转换为完全限定域名的功能。我想到了要转换此功能的想法:
function irpt
{
~/tools/icinga_report $*
}
类似于:
function irpt
{
python <<!
import requests
...lots of python stuff...
!
}
这很完美,除了一件事:我需要在某个地方添加参数,但是看不到哪里。我试图将整个python块包含在{ }
中,但是它不起作用:
function irpt
{
python <<!
import requests
...lots of python stuff...
!
}
shell不接受定义:
-bash: /etc/profile: line 152: syntax error near unexpected token `$*'
-bash: /etc/profile: line 152: `} $*'
有什么办法可以实现? ===编辑=== 受我接受的答案启发,这就是我所做的,也许对其他人有用:
function irpt
{
python <<!
import requests
param="$*".split(' ')
...lots of python stuff...
!
}
这很漂亮。
答案 0 :(得分:2)
看起来有点奇怪,但是您可以使用bash let location
语法动态地提供脚本文件(实际上是命名管道);其余的紧随其后。
<(command)
答案 1 :(得分:2)
一种方法:
function irpt
{
python <<!
import requests
v1='$1'
print(v1)
!
}
运行功能:
$ irpt hello
hello
$
答案 2 :(得分:0)
您可以使用类似的东西
foo() {
cmd=$(cat <<EOF
print("$1")
EOF
)
python -c "$cmd"
}
或者,
foo() {
python -c $(cat <<EOF
print("$1")
EOF
)
}
然后使用类似的功能
foo test