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:
! / usr / bin / env bash y #! / usr / bin / bash, #! / bin / bash comparación
#!/usr/bin/env bash
Proporciona cierta flexibilidad en diferentes sistemas.#!/usr/bin/bash
El sistema de archivos ejecutable dado se controlará explícitamente.
Al /usr/bin/env
ejecutar 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/env
ejecutar 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 $PATH
ponga un bash en el tuyo, y pueden ocurrir errores.
En la mayoría de los casos, se /usr/bin/env
prefiere 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/bash
es más segura en algunos casos porque restringe la posibilidad de inyección del código.
Puede que /usr/bin/bash
no esté disponible en algunos sistemas , pero /bin/bash
debe existir. Por lo tanto, /bin/bash
es la opción preferida para la designación de pantallas.