Flinksh ${file}
は、クラスターを開始および停止することにより、次のエラーを報告します。
[fuyun@bigdata-training tools]$ sh /opt/modules/flink-1.12.0/bin/stop-cluster.sh
/opt/modules/flink-1.12.0/bin/config.sh: line 32: syntax error near unexpected token `<'
/opt/modules/flink-1.12.0/bin/config.sh: line 32: ` done < <(find "$FLINK_LIB_DIR" ! -type d -name '*.jar' -print0 | sort -z)'
/opt/modules/flink-1.12.0/bin/config.sh: line 32: warning: syntax errors in . or eval will cause future versions of the shell to abort as Posix requires
/opt/modules/flink-1.12.0/bin/stop-cluster.sh: line 26: TMWorkers: command not found
/opt/modules/flink-1.12.0/bin/stop-cluster.sh: line 45: /jobmanager.sh: No such file or directory
理由:
flinkの開始および停止スクリプトインタープリターはbashではないため、shコマンドを使用してスクリプトを実行することはできません/opt/modules/flink-1.12.0/bin/start-cluster.sh
。実行時にファイルの絶対パスまたは相対パスを直接入力できます。以下に示すように:
!/ usr / bin / env bashと#!/ usr / bin / bash、#!/ bin / bashの比較
#!/usr/bin/env bash
さまざまなシステムである程度の柔軟性を提供します。#!/usr/bin/bash
指定された実行可能ファイルシステムは明示的に制御されます。
/usr/bin/env
プログラムを実行することにより、プログラムがシステム内にある限り、ユーザーはシステム内のプログラムの場所を見つける必要がありません(コマンドまたはプログラムの場所はシステムによって異なる場合があるため)$PATH
。
/usr/bin/env
プログラムを実行することによるもう1つの利点は、環境に基づいてデフォルトバージョンを見つけて実行し、柔軟性を提供することです。
欠点は、マルチユーザーシステムでは、他の誰かがあなたに$PATH
bashを入れて、エラーが発生する可能性があることです。
ほとんどの場合、/usr/bin/env
特にこのスクリプトを別のバージョンで実行する場合は柔軟性があり、特定の場所を指定する方法#!/usr/bin/bash
がコードを制限するため、より安全な場合があります。インジェクションの可能性。
一部のシステム/usr/bin/bash
では使用できない場合がありますが、/bin/bash
存在している必要があります。したがって、これ/bin/bash
はディスプレイ指定に適した選択肢です。