с помощью sed как добавить N строк

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

expect password: { send some$value\r }

Итак, теперь вам нужно разобраться с переменными Tcl.

Вы могли бы добавить больше цитирования:

/usr/bin/expect -c "
   ...
    expect password: { send {$SERVICE_PASS}; send \r }

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

export L_SRC_SID L_SID MOUNT_POINT SERVICE_PASS APP_SERVER_1 SRC_MOUNT_POINT

/usr/bin/expect -c '  # <- single quote
    set timeout -1
    cd /$env(MOUNT_POINT)/$env(L_SID)/apps
    spawn scp -pr * apps@$env(APP_SERVER_1):/$env(SRC_MOUNT_POINT)/$env(L_SRC_SID)/apps.
    expect {
        yes/no    { send yes\r ; exp_continue }
        password: { send $env(SERVICE_PASS)\r }
    }
    expect eof
'

В общем, использование sleepв expect означает, что либо у вас неправильный тайм-аут, либо вы ожидаете не того. Я менял оба.

0
31.07.2019, 22:33
1 ответ

Предположим, что последовательности ^Mпредставляют символы CR, т.е.

$ cat -et file.csv
hostname1,this is a test,001^M$
hostname2,this is$
a test,002^M$
hostname3,this$
is$
a$
test,003^M$

затем вы можете соединить строки со следующими, если они не заканчиваются на CR, используя

sed -e :a -e '/\r$/!N; s/\n//; ta' file.csv

напр.

$ sed -e :a -e '/\r$/!N; s/\n//; ta' file.csv | cat -et
hostname1,this is a test,001^M$
hostname2,this isa test,002^M$
hostname3,thisisatest,003^M$
1
28.01.2020, 02:39

Теги

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