Параметры командной строки для встроенного скрипта python?

#python #bash

#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...
!
} 
 

Оболочка не принимает определение:

 -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...
!
}
 

Это прекрасно работает.

Ответ №1:

Один из способов:

 function irpt
{
python <<!
import requests
v1='$1'
print(v1)
!
}
 

Запуск функции:

 $ irpt hello
hello
$
 

Ответ №2:

Это выглядит немного странно, но вы можете использовать синтаксис bash <(command) для динамического предоставления файла сценария (в действительности именованного канала); остальное следует.

 function demo {
    python <(echo 'import sys; print(sys.argv)') "$@"
}
 

Ответ №3:

Вы можете использовать что-то вроде этого

 foo() {
cmd=$(cat <<EOF
print("$1")
EOF
)
python -c "$cmd"
}
 

В качестве альтернативы,

 foo() {
python -c $(cat <<EOF
print("$1")
EOF
)
}

 

А затем используйте функцию, подобную

 foo test