我的应用程序:
#!/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 &
- 它运行没有任何问题。我想从 shell 启动它的原因是,因为我想每分钟 crontab 一次。
>&
不支持的语法sh
。您sh
在该脚本中明确用作外壳。您需要将该行重写为:>&
是用于将 stdout 和 stderr 都重定向到文件的csh语法(也受zsh
最新版本支持)。bash
在
sh
(Bourne(它来自哪里)和 POSIX)中,语法是:(你也有错误的 ps/pgrep 语法;
pgrep
不读取它的标准输入,因此将输出ps
传递给它是没有意义的)。为了完整起见,在各种 shell 中重定向 stdout 和 stderr 的语法:
> file 2>&1
: Bourne、POSIX 及其衍生品和鱼>& file
: csh, tcsh, zsh 和 bash 4+(尽管在zsh
且bash
仅当文件名不是十进制数字序列时,否则它是>&fd
Bourne 重定向运算符)。&> file
: bash 和 zsh 3+> file >[2=1]
: rc 和衍生物> file ^&1
: 鱼