Mi aplicación:
#!/bin/sh
#
# D2GS
#
# Go to the directory
cd ~
# Run the applications
if ! ps aux | pgrep "D2GS"; then
wine "C:/D2GS/D2GS.exe" >& /dev/null &
fi
Da error:
./d2gs.sh: 14: ./d2gs.sh: Error de sintaxis: número fd incorrecto
Lo cual es extraño, ya que cuando empiezo wine "C:/D2GS/D2GS.exe" >& /dev/null &
, se ejecuta sin ningún problema. La razón por la que quiero iniciarlo desde Shell es porque quiero programarlo cada minuto.
Respuesta1
>&
no es una sintaxis compatible con sh
. Estás utilizando explícitamente sh
como shell en ese script. Necesitas reescribir esa línea como:
wine "C:/D2GS/D2GS.exe" > /dev/null 2>&1 &
Respuesta2
>&
es elcshsintaxis (también compatible con zsh
versiones recientes de bash
) para redirigir tanto stdout como stderr a un archivo.
En sh
(Bourne (de donde viene) y POSIX), la sintaxis de redirección¹ es:
if ! pgrep D2GS > /dev/null; then
wine C:/D2GS/D2GS.exe > /dev/null 2>&1 &
fi
(También tienes la sintaxis ps/pgrep incorrecta; pgrep
no lee su entrada estándar, por lo que canalizar la salida ps
no tiene sentido).
Para completar, la sintaxis para redirigir tanto stdout como stderr en varios shells:
> file 2>&1
: Bourne, POSIX y derivados y pescado>& file
: csh, tcsh, zsh y bash 4+ (aunque enzsh
ybash
solo cuando el nombre del archivo no es una secuencia de dígitos decimales; de lo contrario, es el>&fd
operador de redirección de Bourne).&> file
: bash y zsh 3+> file >[2=1]
: rc y derivados> file ^&1
: pez
¹ !
en sí fue introducido por el shell Korn y no está disponible en el shell Bourne, aunque POSIX lo ha especificado, sh
por lo que debería estar disponible en cualquier sh
implementación moderna.