Прочитайте первую строку вывода команды. Команда соединяет меня с удаленным терминалом

Часть 1

Скажем, у меня есть команда my_command которая выводит несколько строк.

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

Я думал, что что-то вроде этого будет работать:

 # Get a code that `my_command` prints in its first line parsed_first_line=`my_command | grep -oEe '[0-9]+'` echo 'Here is the first line ' $parsed_first_line 

но это не так. Вывод эха достигается только после того, как my_command полностью закончил, чего я не хочу.

Часть 2

Вступление в подробности: Imagine my_command – это фактически команда, которая соединяет мою оболочку с удаленной оболочкой. Это каким-то образом изменит наше решение для части 1 ?

В случае, если подробности важны, my_command на самом деле является однострочной командой:

bsub /bin/zsh .

Это команда Platform LSF для Platform LSF которая отправляет задание из машины входа (интерактивная оболочка zsh в нашем случае) в удаленную сетку. Когда отправленное задание получает открытый слот в сетке, LSF отправляет его, предоставляя мне интерактивную оболочку на удаленной машине.

Первое, что делает bsub , – это вывод job ID моего задания в удаленной очереди (это то, на что я надеюсь разобрать мой сценарий), а затем, когда слот открыт, он отправляет мою работу.

Мне интересно, будет ли тривиальное решение части 1 работать для Части 2

3 Solutions collect form web for “Прочитайте первую строку вывода команды. Команда соединяет меня с удаленным терминалом”

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

 my_command | { read line line=$(grep -oEe '[0-9]+'); if [ $line ]; then echo 'Here is the first line ' $line fi #possibly read more from my_command, transfer control to another program via `exec`, etc... } 

Почему бы вам просто не наткнуться на стол?

 # Get a code that `my_command` prints in its first line # parsed_first_line=`my_command | grep -oEe '[0-9]+'` parsed_first_line=$( my_command | head -1 | grep -oEe '[0-9]+' ) echo 'Here is the first line ' $parsed_first_line 

Это также позволяет my_command закончить, но это возвращает только первую строку, которая затем может соответствовать вашему grep.

Это для bash , zsh может быть немного другим:

 #!/bin/bash # We'll need a temporary file. TMPFILE=`mktemp` # Start the process in the background my_command > $TMPFILE & # Get its pid so we can clean up that temp file later. PID=$! # Wait for the first line of output first_line=`head -n1 $TMPFILE | grep -oEe '[0-9]+'` while [ -z "$first_line" ]; do # Don't technically need this, but it'll prevent the system from grinding. sleep 1 first_line=`head -n1 $TMPFILE | grep -oEe '[0-9]+'` done echo Result: "$first_line" # Clean up that temp file. wait $PID rm $TMPFILE 
  • Как настроить zsh, чтобы он объяснил мне, где я могу получить исполняемый файл вместо того, чтобы сказать, что файл не найден?
  • Задание zsh на пустой строке
  • Могу ли я выборочно отключить завершение zsh?
  • zsh tcsh-like история навигации
  • Как расширить подстроку команды?
  • таблица ключевых привязок?
  • Не удалось обновить / обновить пакет Oh-My-Zsh с помощью команды `sudo pacman -S Oh-My-Zsh`
  • Как проверить, если текущая оболочка zsh уже выполнила команды `dircolors` и` stty`?
  • Развернуть меньше, чем знак при использовании multios и brace expand
  • Заменить процесс экрана с экрана
  • Как вы используете команду coproc в Bash?
  • Livesearch с первыми 10 матчами в качестве предварительного просмотра для zsh-history?
  • Linux и Unix - лучшая ОС в мире.