Эмулируйте мышь cut'n'paste поведение в сценарии тестирования

Это должно работать приятно даже на сложные споры с пробелом и хуже:

#!/bin/bash
new_args=()
for arg
do
    new_args+=( '-p' )
    new_args+=( "$arg" )
done

for arg in "${new_args[@]}"
do
    echo "$arg"
done

Тест:

$ ~/test.sh foo $'bar\n\tbaz bay'
-p
foo
-p
bar
    baz bay
3
09.07.2012, 12:16
3 ответа

xsel - управляйте X выборами.

xsel --clipboard --input чтения stdin в буфер обмена

xsel --clipboard --output запишите содержание буфера обмена к stdout

3
27.01.2020, 21:20
  • 1
    Хороший, но к сожалению это не доступно в упрощенном дистрибутиве, который я использую. –  l0b0 09.07.2012, 12:16

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

set -e
# Collect the output of the script in a variable
script_output=$(my_script)
# Check that the script output is nice and copypastable
awk '
    /[^[:print:]]/ { print NR ": non-printable character"; exit 1 }
    / $/ { print NR ": trailing whitespace"; exit 1 }
    /.{79}/ { print NR ": line too long"; exit 1 }
' <<EOF
$script_output
EOF

# Use expect to spawn a shell, feed it the script output, and
# check the result against expectations
export script_output
expect <<'EOF'
spawn sh
send "[array get env script_output]\n"
expect "the proper result"
EOF
1
27.01.2020, 21:20

Как я понял, необходимо повторно выполнить команды в точно той же последовательности, которую Вы уже сделали с начала сессии.Правильно?

Так может быть history команда полезна здесь. На самом деле это зависит от Вашего HISTFORMAT, но если это имеет значение по умолчанию, можно использовать некоторую команду флага как echo SOME_FLAG и использование:

history | sed -n 'H;/SOM_FLAG/{/history/!{x;d}};${x;s/\n\s\+[0-9]*\s\+/\n/g;p}'

это извлечет последние команды начиная с SOME_FLAG. Как делает sed работайте здесь:
H просто копии текущий шаблон для содержания буфера
/SOME_FLAG/ часы, если строка соответствует к SOME_FLAG
если это делает это, также проверяет, не делает ли это соответствий к history (это также зависит от Ваших жал оболочки, иногда управляйте уже, находится в истории сразу после выполнения, и histry будет видеть свою запись в нем),
если это соответствует ему, удаляют все предыдущие записи. и у нас есть все команды после последнего флага SOME_FLAG.

После этого можно отправить его для окружения через канал, например:

history | sed -n 'H;/man/{/history/!{x;d}};${x;s/\n\s\+[0-9]*\s\+/\n/g;p}' | bash -x

К сожалению, это - довольно опасный метод: в случае, если Вы используете некоторые команды с удалением, или с изменением важных данных оно может уничтожить что-то. Однако метод с автоматическим copy&paste с моделированием мыши может сделать подобные убытки. Поэтому просто будьте тщательным использованием этого.

И это также должно установить флаг каждый раз, когда Вам нужна эта функция.

0
27.01.2020, 21:20
  • 1
    Нет, извините. Я должен эмулировать копирование кода с мышью, чтобы проверить, существует ли какой-либо значительный пробел или другие прерывания в выводе. –  l0b0 19.07.2012, 23:01

Теги

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