期待スクリプトの変数からキャリッジリターン(\ r)を削除します

DarbyM

Ubuntu16.04のセットアップはスクリプトを期待します

以下の簡単なスクリプトの目標は、sshを使用してリモートマシンのディレクトリで最も古い.zipファイルを見つけることです。
次に、scpを使用して、このファイルをローカルの「workingBuild」ディレクトリにダウンロードします。

現在のスクリプト

#!/usr/bin/expect
set user "hidden"
set pass "hidden"
set sourceDir "/opt/tomcat/someDirectoryName/"
set workingDir "/home/someUser/workingBuild"

spawn sh -c "ssh $user@www ls -t $sourceDir | head -1"
expect "password:"
send "$pass\r"
expect -re ".*\.zip"

set sourceFile $expect_out(0,string)
spawn sh -c "echo 'bob'$sourceFile'bob2'"

spawn sh -c "scp $user@www:$sourceDir$sourceFile $workingDir"
expect {
        password: {send "$pass\r"; exp_continue}
}

問題

保存されているファイル名の先頭にある$ sourceFile変数に非表示のキャリッジリターン(\ r)が入力されているようです。これは、ファイル名とdestinationDirectoryをそのような新しい行に配置するため、scpコマンドで問題を引き起こしています。無効なコマンドの原因:

spawn sh -c scp meliudaj@www:/opt/tomcat/someDirectoryName/
build_0.0.1.zip /home/meliudaj/workingBuild

これは、上記のコードの次のデバッグ行でも示されています。

spawn sh -c "echo 'bob'$sourceFile'bob2'"

$ sourceFile'bob2 'は常に' bob 'の下の新しい行にあります

望ましい結果は次のようになります。

spawn sh -c scp meliudaj@www:/opt/tomcat/someDirectoryName/ build_0.0.1.zip /home/meliudaj/workingBuild

質問

$ sourceFile変数から\ rを削除する方法、または(\ r)が最初から表示されないように$ sourceFile変数に別の方法でデータを入力する方法を教えてください。

PS sed、awk、trを使用してさまざまな試みを試みましたが、何も役に立たなかったようです。

グレンジャックマン

パスワードを送信して「Enterキーを押す」と、sshが最初に行うことは改行を発行することです。expect_outバッファーから抽出するテキストでは、これを考慮していません。また、expectはCRNLを使用して改行を表すことに注意してください。これは、いくつかのネットワークプロコトール標準に準拠することであると私は理解しています。

このインタラクティブなexpectセッションは、問題をほぼ再現します。最後に、変数の内容を外部コマンドod送信して、その内容を正確に確認します。

expect1.1> spawn sh -c {read password; ls -t | head -1}
spawn sh -c read password; ls -t | head -1
42945
expect1.2> send "\r"
expect1.3> expect "*.zip"

somefile.zip
expect1.4> set sourceFile $expect_out(0,string)

somefile.zip
expect1.5> exec od -c << $sourceFile
0000000  \r  \n   s   o   m   e   f   i   l   e   .   z   i   p
0000016

最後の改行の後にある「.zip」で終わるテキストをキャプチャします正規表現を使用するのはかなり簡単です。

expect1.1> spawn sh -c {read password; ls -t | head -1}
spawn sh -c read password; ls -t | head -1
42992
expect1.2> send "\r"
expect1.3> expect -re {.*\r\n(.*\.zip)}

somefile.zip
expect1.4> set sourceFile $expect_out(1,string)
somefile.zip
expect1.5> exec od -c << $sourceFile
0000000   s   o   m   e   f   i   l   e   .   z   i   p
0000014

を使用(1,string)して、最初の括弧のセットでキャプチャされたテキストを取得することに注意してください

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

終了VBAからキャリッジリターン(alt + enter)を削除します

分類Dev

JSONファイルから改行、タブ、キャリッジリターンなどのエスケープシーケンス文字を削除します

分類Dev

キャリッジリターン「\ r」から「\ n」への変換を防止します

分類Dev

解析後、<pre>からのテキストでキャリッジリターンを保持します

分類Dev

不明なオブジェクトをインターフェイスのジェネリックインターフェイスにキャストします(最初は明示的なジェネリックタイプのジェネリックコレクションタイプのタイプから)

分類Dev

スクリプトのヘルプを期待する-sendコマンドからデータをキャプチャする

分類Dev

redisクラスター:luaスクリプトのメンバーからキーを削除します

分類Dev

プリプロセッサの定数からキャストを削除します

分類Dev

LinuxでMSYS2のようにCRLF(キャリッジリターン)を使用してBashスクリプトを処理しますか?

分類Dev

外部スクリプト内の関数からエラーをキャッチ

分類Dev

PowerShellスクリプトにキャリッジリターンを追加しようとしています

分類Dev

別のデスクトップからスクリーンショットをキャプチャする

分類Dev

PythonスクリプトでWindowsスタイルのキャリッジリターンを記述しているのはなぜですか?

分類Dev

シェルスクリプトの関数から終了ステータスをキャプチャする

分類Dev

タイプスクリプトでクリックするとキャンバス要素を削除します

分類Dev

Restanglar。リクエストインターセプターからの応答をキャッチ

分類Dev

レジストリからキー名の一部であるGUIDをキャプチャし、それを変数に変換します

分類Dev

テキストからキャリッジリターンと特殊文字を削除する

分類Dev

変数から複雑なオブジェクトを取得する際のSSISスクリプトタスク `無効なキャスト例外`

分類Dev

クリックイベント、ページへのアクセス、テキストの検索などのユーザーの行動をキャプチャし、後でこれらのデータをクエリして取得します

分類Dev

シャッター(または他のスクリーングラブツール)を設定して、キーボードショートカットからプリセット領域をキャプチャします

分類Dev

シャッター(または他のスクリーングラブツール)を設定して、キーボードショートカットからプリセット領域をキャプチャします

分類Dev

モバイルアプリからDPMデータマトリックスをスキャンする方法

分類Dev

ボタンは関数を介してそれ自体を削除できますか? ジャバスクリプト

分類Dev

JavaでGoogleクラウドデータフローを使用してクラウドストレージから読み取るときに、csvファイルのキャリッジリターンをスキップする方法

分類Dev

txtファイルのキャリッジリターンを削除します

分類Dev

システムの「このリストに固定」および「このリストから削除」ジャンプリストのコンテキストメニューアクションは、カスタムジャンプリストグループのアイテムに対して何も実行しません。

分類Dev

Delphiで特定のタイプの変数をジェネリックTにキャストする方法は?

分類Dev

Groovyのクロージャからスクリプト変数を変更する

Related 関連記事

  1. 1

    終了VBAからキャリッジリターン(alt + enter)を削除します

  2. 2

    JSONファイルから改行、タブ、キャリッジリターンなどのエスケープシーケンス文字を削除します

  3. 3

    キャリッジリターン「\ r」から「\ n」への変換を防止します

  4. 4

    解析後、<pre>からのテキストでキャリッジリターンを保持します

  5. 5

    不明なオブジェクトをインターフェイスのジェネリックインターフェイスにキャストします(最初は明示的なジェネリックタイプのジェネリックコレクションタイプのタイプから)

  6. 6

    スクリプトのヘルプを期待する-sendコマンドからデータをキャプチャする

  7. 7

    redisクラスター:luaスクリプトのメンバーからキーを削除します

  8. 8

    プリプロセッサの定数からキャストを削除します

  9. 9

    LinuxでMSYS2のようにCRLF(キャリッジリターン)を使用してBashスクリプトを処理しますか?

  10. 10

    外部スクリプト内の関数からエラーをキャッチ

  11. 11

    PowerShellスクリプトにキャリッジリターンを追加しようとしています

  12. 12

    別のデスクトップからスクリーンショットをキャプチャする

  13. 13

    PythonスクリプトでWindowsスタイルのキャリッジリターンを記述しているのはなぜですか?

  14. 14

    シェルスクリプトの関数から終了ステータスをキャプチャする

  15. 15

    タイプスクリプトでクリックするとキャンバス要素を削除します

  16. 16

    Restanglar。リクエストインターセプターからの応答をキャッチ

  17. 17

    レジストリからキー名の一部であるGUIDをキャプチャし、それを変数に変換します

  18. 18

    テキストからキャリッジリターンと特殊文字を削除する

  19. 19

    変数から複雑なオブジェクトを取得する際のSSISスクリプトタスク `無効なキャスト例外`

  20. 20

    クリックイベント、ページへのアクセス、テキストの検索などのユーザーの行動をキャプチャし、後でこれらのデータをクエリして取得します

  21. 21

    シャッター(または他のスクリーングラブツール)を設定して、キーボードショートカットからプリセット領域をキャプチャします

  22. 22

    シャッター(または他のスクリーングラブツール)を設定して、キーボードショートカットからプリセット領域をキャプチャします

  23. 23

    モバイルアプリからDPMデータマトリックスをスキャンする方法

  24. 24

    ボタンは関数を介してそれ自体を削除できますか? ジャバスクリプト

  25. 25

    JavaでGoogleクラウドデータフローを使用してクラウドストレージから読み取るときに、csvファイルのキャリッジリターンをスキップする方法

  26. 26

    txtファイルのキャリッジリターンを削除します

  27. 27

    システムの「このリストに固定」および「このリストから削除」ジャンプリストのコンテキストメニューアクションは、カスタムジャンプリストグループのアイテムに対して何も実行しません。

  28. 28

    Delphiで特定のタイプの変数をジェネリックTにキャストする方法は?

  29. 29

    Groovyのクロージャからスクリプト変数を変更する

ホットタグ

アーカイブ