Итак, у меня есть крошечный тестовый скрипт, который ведет себя странно. Предполагалось, что это станет началом некоторых тестов, которые я хотел провести, но я даже не могу заставить этот базовый сценарий работать должным образом. Надеюсь, кто-нибудь сможет обнаружить проблему, потому что я пробовал много других способов сделать это, и все они приводят к одной и той же проблеме.
declare stdout_file=$(mktemp -u)
declare stderr_file=$(mktemp -u)
mkfifo "$stdout_file" "$stderr_file"
cleanup() {
rm "$stdout_file" "$stderr_file" &>/dev/null
}
trap cleanup EXIT
sed 's/\(.*\)/ \1/' < "$stdout_file" &
sed 's/\(.*\)/ \1/' < "$stderr_file" >&2 &
fnc1() {
echo "Executing function"
}
echo "Running test"
fnc1 > $stdout_file 2> $stderr_file
echo "Done"
Я получаю различные результаты, просто выполняя скрипт несколько раз. Ничто из этого, как ни странно, не верно.
$ bash test.sh
Running test
Done
Executing function
$ bash test.sh
Running test
Done
$ Executing function
Да, в последнем примере он фактически заменил введенную мной команду выводом сценария.
Я каждый раз ожидал одного и того же результата что должно было быть
$ bash test.sh
Running test
Executing function
Done
Подробнее здесь: https://stackoverflow.com/questions/783 ... es-in-bash