ユーザー入力を受け入れてから別のスクリプトを実行するスクリプトを実行できますか?

ユーザー入力を受け入れてから別のスクリプトを実行するスクリプトを実行できますか?

私は実行しようとしています:

  1. スクリプト1:VPNを起動するにはパスワードが必要です。
  2. Script2:Script1は起動する必要があります(終了しないでください)。リモートデスクトップの起動

1つのコマンドで両方のコマンドを実行できますか?試行するたびにScript1 &エラーが発生しますが、実行すると正常に動作しますScript1Script1 && Script2Script2を起動する必要がありますが、Script1がまだ完了していないため、これを行うことはできません。

スクリプト1:

VPNUSER=Rilcon42
VPNGRP=01
# =============================================================================

    # you shouldn't have to change anything below here
    VPNURL=https://remote.someserver.edu
    VPNSCRIPT=/usr/share/vpnc-scripts/vpnc-script

    sudo openvpn --mktun --dev tun1 && \
    sudo ifconfig tun1 up && \
    sudo /usr/sbin/openconnect -s $VPNSCRIPT $VPNURL --user=$VPNUSER --authgroup=$VPNGRP --interface=tun1

    sudo ifconfig tun1 down

スクリプト2:

rdesktop 123.1234.23.1453

答え1

スクリプト 1+2:

VPNUSER=Rilcon42
VPNGRP=01
# =============================================================================

    # you shouldn't have to change anything below here
    VPNURL=https://remote.someserver.edu
    VPNSCRIPT=/usr/share/vpnc-scripts/vpnc-script

    sudo openvpn --mktun --dev tun1 && \
    sudo ifconfig tun1 up && \
    sudo /usr/sbin/openconnect -s $VPNSCRIPT $VPNURL --user=$VPNUSER --authgroup=$VPNGRP --interface=tun1 &

    rdesktop 123.1234.23.1453
    wait

    sudo ifconfig tun1 down

答え2

端末からユーザー入力を読み取る部分は、フォアグラウンドで実行する必要があります。ほとんどの設定ではsudoフォアグラウンドで実行する必要があります。

sudoフルスクリプトを呼び出します。連続したコマンドを実行するためにこのように別々の呼び出しを実行することは意味がありませんsudo

openconnectユーザー入力を読み取らないとし、Script次に変更します。

VPNUSER=Rilcon42
VPNGRP=01
VPNURL=https://remote.someserver.edu
VPNSCRIPT=/usr/share/vpnc-scripts/vpnc-script

sudo -b sh -c '
  openvpn --mktun --dev tun1 &&
  ifconfig tun1 up && {
    /usr/sbin/openconnect -s "$1" "$2" --user="$3" --authgroup="$4" --interface=tun1
    ifconfig tun1 down
  }
' "$VPNSCRIPT" "$VPNURL" "$VPNUSER" "$VPNGRP"

そして、VPNが接続された後にのみフォアグラウンドでScript1を実行します。 (これは検出するのが難しいかもしれません。おそらく現れるまでリモート側にpingを送ることです)

私はopenconnectに慣れていないので、それが何であるかを推測しています。端末でユーザー入力が必要な場合は、バックグラウンドで実行してopenconnectからVPN接続が切断されるまでブロックすると機能しません。しかし、これがうまくいくなら、パスワードを読んだ後にバックグラウンドに入るオプションがあるかもしれません。

関連情報