Использование обеих ловушек и Exec для перенаправления вывода на TEE в Bash

Я думаю, что это проблема XY . Вам действительно не нужно создавать динамический оператор case . Вы просто хотите использовать файл как простое хранилище ключей. Одним из решений является поиск в файле с помощью grep , а затем извлечение значения с помощью cut :

ret=$(grep "^$line" file.txt | cut -d = -f 2)

2
17.10.2018, 13:45
1 ответ

Вы должны игнорировать ^C/ SIGINTв функции обработки поста -:

preprocess(){
   yes baa
}
postprocess(){
   sed 's/a/z/g'
}
preprocess | { trap '' INT; postprocess; sleep 1; echo DONE; }

Когда вы запустите этот конвейер и нажмете ^C, preprocessбудет уничтожен, но postprocessпродолжит работу, пока не будет использован весь вывод, произведенный preprocess.

Обратите внимание, чтоtrap '' INT(с пустой строкой в ​​качестве обработчика )также будет игнорировать SIGINTв подпроцессах; не заменяйте его, например. trap 'echo INT trapped' INT, потому что это приведет к тому, что любой sedи т. д. также будет уничтожен с помощью '^C', несмотря на то, что сигнал обрабатывается в родительском процессе.

2
27.01.2020, 22:17

Теги

Похожие вопросы