Erro de sintaxe: número fd incorreto?

3

Minha inscrição:

#!/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

Dá erro:

./d2gs.sh: 14: ./d2gs.sh: Syntax error: Bad fd number

O que é estranho, desde quando eu inicio wine "C:/D2GS/D2GS.exe" >& /dev/null & - ele roda sem nenhum problema. A razão pela qual eu quero iniciá-lo a partir do shell é porque eu quero criá-lo a cada minuto.

    
por htorbov 29.11.2017 / 19:50

2 respostas

7

>& não é compatível com a sintaxe sh . Você está usando explicitamente sh como o shell desse script. Você precisa reescrever essa linha como:

wine "C:/D2GS/D2GS.exe > /dev/null 2>&1 &
    
por 29.11.2017 / 19:52
7

>& é a sintaxe csh (também suportada por zsh e versões recentes de bash ) para redirecionar stdout e stderr para um arquivo.

Em sh (Bourne (de onde vem) e POSIX), a sintaxe é:

if ! pgrep D2GS > /dev/null; then 
  wine C:/D2GS/D2GS.exe > /dev/null 2>&1 &
fi

(você tem a sintaxe errada ps / pgrep também; pgrep não lê seu stdin, então pipilar a saída de ps para ela é inútil).

Para completar, a sintaxe para redirecionar stdout e stderr em vários shells:

  • > file 2>&1 : Bourne, POSIX e derivados e peixe
  • >& file : csh, tcsh, zsh e bash 4+ (embora em zsh e bash apenas quando o nome do arquivo não é uma sequência de dígitos decimais, caso contrário, é o operador de redirecionamento >&fd Bourne).
  • &> file : bash e zsh 3 +
  • > file >[2=1] : rc e derivados
  • > file ^&1 : peixe
por 29.11.2017 / 19:53