Функция в bash, игнорирующая параметры при вызове через подстановку командLinux

Ответить
Anonymous
 Функция в bash, игнорирующая параметры при вызове через подстановку команд

Сообщение Anonymous »

Вот скрипт, который я написал для входа в bash, под названием echoline.sh. При вызове с флагом -e echoline печатает на stderr вместо stdout.

Код: Выделить всё

#!/bin/bash
# ---------- echoline.sh ----------

to_stderr=false

### get input
set -f # stops * being expanded
cml_args="$*" ### flags passed via pipe are caught here

### parse input
while getopts ":seco:" arg; do
case "${arg}" in
e)
cml_args=${cml_args//"-e"/}
;;
*)
;;
esac
done

### output to console
printable=$( IFS=$'\n'; echo "${cml_args[*]}" )
if [[ $to_stderr == false ]]; then
echo "$printable"
else
echo "$printable" 1>&2
fi

Однако у меня возникла проблема: если у меня есть функция, использующая echoline, и эта функция вызывается посредством подстановки команд в другом месте, в данном случае first.sh, Флаг -e, переданный в echoline, не принимается и вместо этого выводится на стандартный вывод.

Код: Выделить всё

#!/bin/bash
# ---------- first.sh ----------

echoLine() {
./echoline.sh "$@"
}

get_serial_number() {
echoLine -e "This is supposed to write to stderr, but actually writes to stdout"
echo "This is supposed to write to stdout and does."
}

main() {
echoLine -e "I can write to stderr here just fine!"
example_serial=$(get_serial_number)
echo "example_serial = $example_serial"
}

main

Запуск first.sh дает следующий результат:

Код: Выделить всё

[root@DESKTOP-A8HSSI8 test]# ./first.sh
I can write to stderr here just fine!
example_serial = This is supposed to write to stderr, but actually writes to stdout
This is supposed to write to stdout and does.
Почему echoline может записывать в stderr при обычном вызове, но не при вызове внутри скрипта, используемого при подстановке команд? Это связано с тем, как getopts читает аргументы командной строки?

Подробнее здесь: https://stackoverflow.com/questions/787 ... bstitution
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»