Назад | Перейти на главную страницу

Как ввести сценарий bash в командной строке, но не обрабатывать сценарий, пока не будет введен весь сценарий

Я провожу интерактивное тестирование с помощью HP QuickTest Professional и Linux. Я подключаюсь через SSH и загружаю строки сценария BASH прямо в командную строку.

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

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

Спасибо!

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

{
echo one
echo two
}

Другой способ - направить эхо в sh или bash:

echo '
echo one
echo two
' | bash

или используйте eval:

eval '
echo one
echo two
'

Редактировать:

Это тоже работает:

bash <<EOF
echo one
echo two
EOF

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

 ( ls; echo this; echo that; )

такая же сделка, многострочный:

(
ls
echo this
echo that
)

cat test.sh | ssh user@server.net '/bin/bash -'

Но если вы можете использовать ssh, вы все равно можете просто SCP закончить скрипт? Отредактируйте, и если вы не можете SCP, вы можете:

cat test.sh | ssh user@server.net 'cat > test.sh'

Не знаком с «HP's QuickTest Professional», но что мешает вам записать его в файл и запустить?

Я бы посмотрел на batch - он делает почти то, что вы хотите.

Это действительно зависит от того, что вы подразумеваете под «не выполнять, пока не проработаете все строки». Bash - это интерпретируемый язык (не компилируемый), поэтому независимо от того, каким образом вы его разрезаете, оболочка будет читать и выполнять строки по одной за раз, каждая команда будет генерировать свой собственный код возврата независимо, независимо от того, помещаете ли вы эти команды в подоболочки или другие вещи.

Я подозреваю, что вы действительно спрашиваете:

(а) есть ли способ собрать весь вывод в одной области экрана без перерыва

(б) есть ли способ, чтобы вам нужно было только один раз нажать клавишу "Enter", чтобы все команды выполнялись последовательно

Если вы присоединитесь к каждой командной строке, разделенной точкой с запятой ';' тогда это имеет тот же эффект, что и запуск их на разных строках. Так что соедините их все вместе в одну строку и нажмите «Enter» один раз в конце. Вы можете сделать это вручную, набрав, или вы можете обработать свой сценарий оболочки с помощью инструмента (например, sed или tr), чтобы заменить символы конца строки точками с запятой, а затем передать результат в ssh. На локальном хосте запустите следующее:

кот script.sh | tr "\ n" ';' | ssh [удаленный хост]

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