Как получить имя исходного файла, который используется для копирования с помощью регулярного выражения?

Tmux — хороший вариант для запуска долго -запущенных процессов в фоновом режиме.

Мне приходится продолжать выполнять -длительно работающие процессы на экземпляре/сервере виртуальной машины облачной платформы Google (с ОС :Ubuntu 16.0 ). Там, где мне нужно запустить SSH-терминал и с терминала, я должен держать терминал подключенным, чтобы запустить процесс. Теперь до этого все хорошо. Но подождите, если соединение с моим SSH-терминалом прервется, то длительные -запущенные процессы немедленно остановятся, и, следовательно, мне придется повторно -запустить их еще раз после перезапуска ssh-терминала или с нового ssh-терминала.

Я считаю, что tmux— это хорошее решение, позволяющее избежать завершения процессов, которые мы хотим запустить, даже после закрытия терминала.

Терминальный мультиплексор(tmux)для запуска сеанса tmux:

  1. Запустите терминал ssh
  2. Тип tmux. Откроется окно в том же терминале.
  3. Запустите команду, чтобы запустить долго -работающие процессы в сеансе tmux.

Теперь, даже если SSH-терминал внезапно закрывается/прекращается, сессия tmux продолжит выполнение запущенных lon -запущенных процессов на экземпляре/сервере.

Если соединение прервано, то как переподключить его, чтобы увидеть процессы, запущенные в сеансе tmux в фоновом режиме:

  1. переподключитесь или откройте новый терминал ssh. Чтобы увидеть этот процесс (, который продолжает работать в фоновом режиме ), введите команду :tmux attach.

Хотите завершить сеанс tmux:

  1. Остановить процесс. Затем введите exitв окне терминала tmux --.

(Обратите внимание, что :Если мы используем tmux detachкоманду :, она выйдет из окна/терминала сеанса tmux без прерывания/остановки сеансов tmux)

Подробнее см. следующую статью:

  1. https://www.tecmint.com/keep-remote-ssh-sessions-running-after-disconnection/
  2. https://limitlessdatascience.wordpress.com/2019/08/22/tmux-to-keep-jupyter-notebook-running-in-the-background/

1
13.11.2020, 13:40
1 ответ

Если вы чувствуете, что вам нужно указать правильное имя файла назначения, что, я думаю, вам не следует делать , тогда используйте шаблон подстановки имени файла (, который не является регулярным выражением)в петлю:

for pathname in /my/path/for/the/image/image-abc-*.bin
do
    [ -e "$pathname" ] &&
    scp "$pathname" "mydevice:flash:$(basename "$pathname")"
done

При этом будут скопированы все файлы, имена которых соответствуют заданному шаблону подстановки. Тест -eгарантирует, что имя пути в $pathnameдействительно существует перед вызовомscp(шаблон останется нераскрытым, если не будет найдено совпадающих имен ).

Утилита basenameиспользуется здесь для извлечения части пути к имени файла. Затем это используется в качестве имени файла назначения. Можно также использовать подстановку параметра "${pathname##*/}"вместо вызова подстановки команды basename.

Если вы уверены, что ваш шаблон будет соответствовать только одному файлу, вы также можете

set -- /my/path/for/the/image/image-abc-*.bin
[ -e "$1" ] && scp "$1" "mydevice:flash:$(basename "$1")"

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

2
18.03.2021, 22:49

Теги

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