内嵌python脚本的命令行参数?

时间:2019-04-17 08:26:30

标签: python bash

我有一组作为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...
!
}

这很漂亮。

3 个答案:

答案 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