Основываясь на использовании @mr.spuratic BASH_ENV
, здесь I туннель $@
через script -f -c
script -c <command> <logfile>
можно использовать для запуска команды внутри другой pty (и группы процессов) но он не может передать какие-либо структурированные аргументы в <command>
.
Вместо <command>
является простой строкой, которая будет аргументом для вызова библиотеки system
.
Мне нужно туннель $@
внешнего bash в $@
of bash, вызванный скриптом.
Поскольку declare -p
не может принимать @
, здесь я использую магическую переменную bash _
(с фиктивным значением первого массива, которое будет перезаписано bash). Это спасает меня от любых важных переменных:
Доказательство концепции: BASH_ENV=<( declare -a _=("" "$@") && declare -p _ ) bash -c 'set -- "${_[@]:1}" && echo "$@"'
«Но, вы говорите,« вы передаете аргументы в bash - и действительно я , но это простая строка известного символа. Здесь используется script
SHELL=/bin/bash BASH_ENV=<( declare -a _=("" "$@") && declare -p _ && echo 'set -- "${_[@]:1}"') script -f -c 'echo "$@"' /tmp/logfile
, которая дает мне эту функцию-обертку in_pty
:
in_pty() {
SHELL=/bin/bash BASH_ENV=<( declare -a _=("" "$@") && declare -p _ && echo 'set -- "${_[@]:1}"') script -f -c 'echo "$@"' /tmp/logfile
}
или эта обертка без функции в качестве составной строки для Makefiles:
in_pty=bash -c 'SHELL=/bin/bash BASH_ENV=<( declare -a _=("" "$$@") && declare -p _ && echo '"'"'set -- "$${_[@]:1}"'"'"') script -qfc '"'"'"$$@"'"'"' /tmp/logfile' --
...
$(in_pty) test --verbose $@ $^
Как следует из сообщения об ошибке, вы можете попробовать использовать метод Bind Variables. Если вы не знакомы с ними, они могут быть очень полезны для множества вещей, включая обход ошибки ORA-01704 при использовании SQL * Plus или даже защиту вашей базы данных от потенциальных атак SQL-инъекций.
Вот несколько примеров, которые вы можете использовать:
https://asktom.oracle.com/pls/asktom/f?p=100:11:0: ::: P11_QUESTION_ID: 2320123769177
https://asktom.oracle.com/pls/asktom/asktom.search?tag=pls-00172-string-literal-too-long [ 111]
https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:2320123769177
https://oracle-base.com/articles/misc/literals-substitution-variables-and-bind-variables