Expectを使用してbashスクリプトを作成する

Expectを使用してbashスクリプトを作成する

私は予想を使ってbashスクリプトを書くつもりです。 Bashスクリプトはリモートサーバーにあり、後で日付/時刻に実行されます。私は大容量データファイルを読み込み、処理を実行し、適切な値を使用してbashスクリプトを作成するためにExpectを使用しています。このために、bashスクリプトの値を保持する変数を設定しました。

set awk_cmd "awk '\{print \\\$3\}'"
if {$reboot==$reboot_N} {
set command5 "echo '#!/bin/bash\n\ndeclare -i last_reboot=\$(w | grep up | grep days | ${awk_cmd})\n\nif (( \$last_reboot !< 8 )); then\necho \"Your ..."' > /root/script.sh

明らかにechoコマンドのかなりの部分を編集しました。しかし、私が受け取ったエラーは$ {awk_cmd}セクションにあります。 awk は「awk '{print $3}'」形式を使用します。

ただし、bashスクリプトに一重引用符を印刷することはできません。上記は引用符なしで{print $ 3}を印刷し、awkコマンドで一重引用符をエスケープしようとするすべての試みは失敗します。

二重引用符と一重引用符を使用しました。私のコマンドのすべては、awkコマンドを除いて動作します。

私は何を見逃していますか?

編集:もっと簡単にするために、一重引用符で囲まれた文字列の中にリテラル一重引用符を渡しました。

ベストアンサー1

私はそれを見つけたと思います。

set command5 "echo '#!/bin/bash\n\ndeclare -i last_reboot=\$(w | grep up | grep days | awk '\\\''\{print \$3\}'\\\'')\n\nif....." > script.sh

上記の結果は次のとおりです。

#!/bin/bash

declare -i last_reboot=$(w | grep up | grep days | awk '{print $3}')

if (( $last_reboot >= 7 )); then
echo "Your ..."

私は答えを見つけましたここ。まだ正しい脱出順序が見つかりませんでした。

おすすめ記事