>&
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 &
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.
>&
é 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 Tags wine terminal shell-script