#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