Доступ к параметру скрипта из функции bash без передачи их по вызову
Есть ли способ получить доступ к параметрам скрипта bash из функции скрипта, если функция не вызывается явно с параметрами скрипта?
Благодарю.
3 ответа
Решение
Нет, но вы можете взломать его, если вы работаете в Linux, прочитав командную строку вашего скрипта из `/proc':
function myfunc {
while read -d $'\0'
do
echo "$REPLY"
done < /proc/$$/cmdline
}
-d $'\0'
требуется для чтения файла cmdline, потому что строки имеют нулевой (двоичный ноль) разделитель. В примере $REPLY
будет каждый параметр по очереди, в том числе сам Bash. Например:
/home/user1> ./gash.sh one two three
/bin/bash
./gash.sh
one
two
three
Вот пример, который установит параметры функции в соответствии со сценарием (и отобразит их):
function myfunc {
while read -d $'\0'
do
args="$args $REPLY"
done < /proc/$$/cmdline
set -- $args
shift 2 # Loose the program and script name
echo "$@"
}
Просто вызовите функцию с аргументами скрипта.
foo () {
for arg in "$@"
do
echo "$arg"
done
}
foo "$@"
Краткий ответ: "Нет, не то, что я знаю".
Если бы это было сделано, я бы использовал псевдонимы аргументов скрипта.
#!/bin/bash
script_args=("$@")
myfunc () {
for a in "$@" ; do
for b in "${script_args[@]}" ; do
echo "$a: $b"
done
done
}
myfunc one two
А потом позвоните так:
./myscript.sh 1 2
Выход:
one: 1
one: 2
two: 1
two: 2