Я провожу интерактивное тестирование с помощью 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 [удаленный хост]
Обратите внимание, что это не создает интерактивную оболочку на удаленном хосте, а только запускает команды из сценария и затем возвращает управление вашему локальному хосту.