SSHを使用したリモートサーバーインラインコマンドの実行

SSHを使用したリモートサーバーインラインコマンドの実行

リモートサーバーに接続して更新を実行するスクリプトを作成しようとしていますが、その時点でコンピュータを使用している人がいないことを確認したいので、「ps」コマンドを実行してプロセスを確認してから、インストールを続行する必要があるかどうかを尋ねます。私が作成しようとしているコードは次のとおりです。

ssh -T root@$machine <<- 'END'
    #Show the non-root processes
    ps -ef | grep -v root

    #Prompt if should continue (this doesn't work)
    echo "Continuar a instalação? [y/n]"
    select valor in y n
    do
        case $REPLY in
            y )
                echo "Digitado y"
                break
                ;;
            n )
                echo "Digitado n"
                exit
                ;;
        esac
    done

    #Test if it's working
    echo "Test"
END

このコードを実行すると、次の動作が発生します。

Continuar a instalação? [y/n]
1) y
2) n
#? 1) y
2) n
#? #? 1) y
2) n
#? #? 
#? 1) y
2) n
#? #? #? 1) y
2) n
#? #? #? #?

その後、スクリプトが閉じます。 -t -tオプションを使用してsshを実行してみましたが、まだ同じ問題が発生しました。私は何を見逃していますか?

ベストアンサー1

selectスクリプトをオンにすると、リモートプロセス()と通信できなくなりますstdin。入力が終わると、selectファイルからいくつかのゴミを読み、次にstdinEOFを読み取るという状況が発生します。

ファイルをサーバーにコピーしscpた後に実行するために使用する必要があります。

おすすめ記事