Как написать скрипт для запуска Thinkorswim

grep 201806{19..21} test

расширяется оболочкой до:

grep 20180619 20180620 20180621 test

Что grepпонимает как поиск 20180619внутри 3 файлов, 20180620, 20180621и test.

Если изменить на:

grep -e201806{19..21} test

Затем это расширяется до:

grep -e20180619 -e20180620 -e20180621 test

Что дает 3 eвыражения для grepдля поиска в test.

Или вы можете:

printf '%s\n' 201806{19..21} | grep -f - test

Когда мы передаем выражения в виде количества строк ввода вgrep(с некоторыми реализациями, вам может понадобиться /dev/stdinвместо-).

В частности, zshвы также можете сделать это:

numbers=({19..21} 25 31)
grep -E "201801(${(j:|:)numbers})" test

Где мы используем флаг расширения параметра (j:|:)для соединения элементов массива с|(расширенным оператором чередования регулярных выражений ), чтобы его можно было использовать в качестве ERE.

Или вы можете связать этот массив со скаляром регулярного выражения с помощью:

$ typeset -T re numbers '|'
$ numbers=({19..21} 25 31)
$ echo $re
19|20|21|25|31

В то время как регулярные выражения обычно не имеют возможности сопоставления диапазонов чисел, zshшаблоны (, которые с extendedglobфункционально эквивалентны регулярным выражениям )работают с оператором <x-y>(только для последовательностей десятичных цифр):

print -rl -- ${(M)${(f)"$(<test)"}:#*201806<19-21>*}
0
11.06.2020, 08:20
1 ответ

Это было довольно легко исправить. Спасибо пользователю muru за помощь. Я заставил сценарий сказать это:

#!/bin/sh

sudo /opt/thinkorswim/thinkorswim

Затем добавил это к/etc/sudoers:

username ALL=(ALL) NOPASSWD: /opt/thinkorswim/thinkorswim

sudoработал на sh, а не на самом файле. Теперь все работает отлично, это экономит мне много времени каждый день. Еще раз спасибо муру .

0
18.03.2021, 23:28

Теги

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