bc: запрещает ли POSIX автономное использование операторов отношения?

Самым простым решением было бы запустить каждое из двух фоновых заданий и перенаправить их вывод в файлы:

 utility1 >utility1.out 2>utility1.err &
 utility2 >utility2.out 2>utility2.err &

Это дает дополнительное преимущество, заключающееся в том, что терминал не засоряется выводом.

Очевидно, что вы можете перенаправить и поток ошибок, и поток вывода в один и тот же файл.:

 utility1 >utility1.out 2>&1 &
 utility2 >utility2.out 2>&1 &

Вы также можете использоватьtmux:

 tmux new "utility1" ';' split "utility2"

tmuxвыйдет, как только будут завершены все команды. Чтобы избежать этого, измените "utility"на "utility;read". Это заставит панель оставаться открытой, пока вы не нажмете Enter .

8
23.12.2019, 03:39
1 ответ

Perhaps I am misinterpreting, but this language seems to disallow the syntax used in the above example.

В этом примере предполагается, что GNU bc добавляет свои собственные расширения к языку bc. Как описано в его руководстве , вы должны использовать переключатель -s, чтобы заставить его обрабатывать точный язык POSIX bc, или переключатель -w, если вы хотите, чтобы он предупреждал о расширениях :

.
$ echo '1.2 > 0.4' | bc -s
(standard_in) 2: Error: comparison in expression
$ echo '1.2 > 0.4' | bc -w
(standard_in) 2: (Warning) comparison in expression
1
$ echo '1.2 > 0.4' | bc
1

If so, how should I rewrite my example?

$ printf 'if(%s > %s){a=1};a\n' 1.2 0.4 | bc -s
1

спасибо @icarus за более короткую и приятную для глаз версию.

11
27.01.2020, 20:11

Теги

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