[Introducción a Flink] Flink inicia el clúster a través de sh e informa un error

Flink sh ${file}informará el siguiente error iniciando y deteniendo el clúster:

[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

Razón: El
intérprete de script de flink start y stop no es bash, por lo que el script no se puede ejecutar a través del comando sh. Puede ingresar directamente la ruta absoluta o la ruta relativa del archivo al ejecutarlo /opt/modules/flink-1.12.0/bin/start-cluster.sh. Como se muestra abajo:

Inserte la descripción de la imagen aquí

! / usr / bin / env bash y #! / usr / bin / bash, #! / bin / bash comparación

  • #!/usr/bin/env bashProporciona cierta flexibilidad en diferentes sistemas.
  • #!/usr/bin/bashEl sistema de archivos ejecutable dado se controlará explícitamente.

Al /usr/bin/envejecutar el programa, el usuario no necesita encontrar la ubicación del programa en el sistema (porque la ubicación del comando o programa puede ser diferente en diferentes sistemas), siempre que el programa esté en el suyo $PATH;

Al /usr/bin/envejecutar el programa Otro beneficio es que encontrará y ejecutará la versión predeterminada en función de su entorno y proporcionará flexibilidad.

La desventaja es que es posible que en un sistema multiusuario, alguien más $PATHponga un bash en el tuyo, y pueden ocurrir errores.

En la mayoría de los casos, se /usr/bin/envprefiere porque brinda flexibilidad, especialmente si desea ejecutar este script en una versión diferente; y la forma de especificar una ubicación específica #!/usr/bin/bashes más segura en algunos casos porque restringe la posibilidad de inyección del código.

Puede que /usr/bin/bashno esté disponible en algunos sistemas , pero /bin/bashdebe existir. Por lo tanto, /bin/bashes la opción preferida para la designación de pantallas.

Supongo que te gusta

Origin blog.csdn.net/lz6363/article/details/112472262
Recomendado
Clasificación