Разделить переменную Bash на 3 переменные на основе разделителей?

Во-первых,-R означает, что вы пытаетесь возобновить существующий сеанс экрана, который, вероятно, уже что-то запускает. В этом случае вы не можете просто вставить в него свои команды оболочки и надеяться, что они будут выполнены. Что, если в возобновленном сеансе экрана, например, был запущен редактор? Поэтому не используйте-R , если вы хотите указать команду для запуска.

Другая проблема заключается в том, что когда вы используете перенаправление ввода через << __EOF__, вызываемая программа запускается без tty , то есть без интерактивного терминала. Это можно легко продемонстрировать здесь :

.
$ tty
/dev/pts/0

$ tty << __EOF__
__EOF__
not a tty

К счастью для вас, screenподдерживает запуск пользовательских команд при запуске. Это так же просто, какscreen command args(не заметить-R в послеэкранном режиме ).

В вашем случае вам придется передавать все свои команды в качестве аргументов в /bin/sh, потому что экран не будет запускать для вас несколько команд оболочки. Что-то вроде этого должно работать:

$ screen /bin/sh -cx "cd /home/users/devops_tester/apps/Selenium-Webdriver; export DISPLAY=:99; npm start"

Он создаст новый сеанс экрана и выполнит ваши команды.-x заставляет оболочку печатать команды, которые она запускает, для справки. Это необязательно, вы можете удалить его.

Вы также можете запустить описанное выше в сеансе немедленного отсоединения экрана и повторно -подключиться к нему позже:

$ screen -d -m /bin/sh -cx "cd /home/...; export...; npm start"
# runs the commands in screen but returns immediately

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

И, конечно же, вы можете повторно -прикрепить вышеуказанный сеанс, чтобы посмотреть, что там происходит.

$ screen -R    # re-attach to the above screen session

И последнее, но не менее важное -вместо того, чтобы передавать все ваши команды в качестве аргументов /bin/sh, может быть проще создать небольшой сценарий оболочки из 3 -лайнеров, сделать его исполняемым и запустить его с помощью простого вызова:

]
$ screen /path/to/the-script
1
24.05.2019, 22:55
2 ответа

Чтобы получить год выпуска и автора, вы можете использовать команду grep. Кроме того, вы можете использовать расширение параметра, чтобы получить заголовок:

ath=${TestString/(*)*}
year=$(grep -o '(.*)' <<<"$TestString")
auth=$(grep -o '\[.*\]' <<<"$TestString")

Это предполагает, что в названии никогда не будет скобок или квадратных скобок, год будет всегда заключен в круглые скобки, а автор будет всегда заключен в скобки. в скобках.

.— это токен регулярного выражения, который соответствует «любому одиночному символу», добавление *указывает, что он соответствует от нуля до неограниченного количества раз. Таким образом, он должен соответствовать буквально всему, что заключено в круглые скобки. Если вы хотите сузить круг, и ваш классный год всегда будет числом, вы можете сделать '([0-9]+)', что по-прежнему является широким решением, которое можно еще больше сузить с помощью дополнительной информации о входных данных.

Скобки нужно экранировать, потому что они создают класс символов в регулярном выражении, и мы хотим сопоставить их буквально.

0
27.01.2020, 23:30

С расширением параметра bash:

# remove matching suffix ` (*`    
ath="${TestString%% (*}"

# remove matching prefix `*) `
author="${TestString##*) }"

# remove matching prefix `*(`
classyear="${TestString##*(}"
# remove matching suffix ` [*` and add the missing `(`
classyear="(${classyear%% [*}"
2
27.01.2020, 23:30

Теги

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