私のアプリケーション:
#!/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
エラーを与える:
./d2gs.sh:14:./d2gs.sh:構文エラー:不正なfd番号
私が始めたときから、これは奇妙ですwine "C:/D2GS/D2GS.exe" >& /dev/null &
-問題なく実行されます。シェルから起動したいのは、毎分crontabしたいからです。
>&
は、sh
でサポートされている構文ではありません。そのスクリプトでは、シェルとしてsh
を明示的に使用しています。その行を次のように書き換える必要があります。
wine "C:/D2GS/D2GS.exe" > /dev/null 2>&1 &
>&
は、stdoutとstderrの両方をファイルにリダイレクトするためのcsh構文(zsh
およびbash
の最近のバージョンでもサポートされています)です。
sh
(Bourne(どこから来たか)およびPOSIX)では、構文は次のとおりです。
if ! pgrep D2GS > /dev/null; then
wine C:/D2GS/D2GS.exe > /dev/null 2>&1 &
fi
(ps/pgrepの構文も間違っています。pgrep
はstdinを読み取らないため、ps
の出力をそこにパイプしても意味がありません)。
完全を期すために、さまざまなシェルでstdoutとstderrの両方をリダイレクトする構文:
> file 2>&1
:ボーン、POSIXおよび派生物と魚>& file
:csh、tcsh、zsh、bash 4+(ただし、zsh
とbash
は、ファイル名が10進数のシーケンスでない場合のみ、それ以外の場合は>&fd
Bourneリダイレクト演算子)。&> file
:bashおよびzsh 3以降> file >[2=1]
:rcおよび派生物> file ^&1
: 魚