Cuando uso el siguiente código en la terminal SSH para CentOS, funciona bien:
paste <(printf "%s\n" "TOP")
Pero si coloco el mismo código de línea en un script de shell (test.sh) y ejecuto el script de shell desde la terminal, arroja un error ya que esto
./test.sh: line 30: syntax error near unexpected token ('
./test.sh: line 30: paste <(printf "%s\n" "TOP")
¿Como puedo solucionar este problema?

dashlugar debash).#!/bin/shen la cima. Ejecuté comobash test.shpero tampoco funcionó.bashen modo POSIX tampoco admite esa sintaxis (cuando se llama con--posixo como/bin/sh). Uso#!/bin/bash.POSIXLY_CORRECTvariables configuradas cuando comienzasbash?#!/bin/bashen la parte superior solucionó el problema.Respuestas:
Sustitución de proceso no se ha especificado por POSIX, por lo que es compatible con toda la cáscara que POSIX, sólo algunas conchas como
bash,zsh,ksh88,ksh93apoyo.En el
Centossistema,/bin/shes enlace simbólico a/bin/bash. Cuandobashse invoca con nombresh,bashingresa al modo posix ( Bash Startup Files - Invocado con nombre sh ). En modo posix,process substitutionno es compatible, causa un error de sintaxis.La secuencia de comandos debería funcionar, si llama
bashdirectamentebash test.sh. Si no, tal vezbashha entrado en modo posix. Esto puede ocurrir si comienzabashcon el--posixargumento o la variablePOSIXLY_CORRECTse establece cuando sebashinicia:O
bashestá construido con--enable-strict-posix-defaultopción.Aquí, no necesita la sustitución del proceso, puede usar tuberías de shell estándar:
-es la forma estándar de decirpasteque lea los datos de stdin. Con algunaspasteimplementaciones, puede omitirlo, aunque eso no es estándar.Donde sería útil es al pegar la salida de más de un comando como en:
En sistemas que admiten
/dev/fd/n, eso se puede hacershcon:(Es lo que
<(...)hace internamente).fuente
Aquí hay otra solución alternativa. En lugar de ejecutar el comando, ejecuta bash y pasa el comando a bash usando -c:
fuente