bashスクリプトopenvpn、出力待ち、sshサーバー、openvpn終了

bashスクリプトopenvpn、出力待ち、sshサーバー、openvpn終了

bash スクリプトを使用して openvpn 接続を開始し、トンネルが確立されるとサーバーへの SSH ターミナル接続を開始し、SSH 接続が閉じると openvpn 接続も閉じます。

まず、提案されたソリューションを実装してみました。https://stackoverflow.com/questions/21001220/bash-sequence-wait-for-output-then-start-next-programシェルスクリプトで

#!/bin/bash
exec 3< <(sudo openvpn --config  /etc/openvpn/server.ovpn)
sed '/Initialization Sequence Completed$/q' <&3 ; cat <&3 &
ssh server

Fish Shellでsh ssh-vpn.shとしてこのスクリプトを実行します。

スクリプトとして構文エラーが発生しますline 2: syntax error near unexpected token '<'。スクリプト外ではこのエラーは発生しません。

また、これらのコマンドをスクリプトとして使用しないと、ファイルディスクリプタ3がすでに存在するため、時にはエラーメッセージが表示されるようです。

  1. スクリプトで構文エラーを回避するには?

  2. 後でopenvpn接続を自動的に閉じるようにスクリプトを拡張するにはどうすればよいですか?

  3. スクリプトの最後にファイル記述子を閉じるにはどうすればよいですか?

一つの質問にあまりにも多くの質問だった場合は謝罪します。これは長い間のスクリプト質問のようで、まだここで学ぶことがたくさんあります。

ベストアンサー1

問題は、コードがbashシェル用に書かれていますが、shそれを実行するために明示的に使用することです。ますます多くのプラットフォームでは、このコンテンツは同じではありません。

代わりにsh ssh-vpn.sh、2つのより良いオプションがあります

  1. スクリプトを実行可能にし、この#!行で使用するシェルを定義します。

    # just once
    chmod a+rx ssh-vpn.sh
    
    # thereafter
    ./ssh-vpn.sh
    
  2. 正しいシェルを使用してスクリプトを実行してください。

    bash ssh-vpn.sh
    

おすすめ記事