내 응용 프로그램:
#!/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을 수행하고 싶기 때문입니다.
답변1
>&
구문이 지원되지 않습니다 sh
. sh
해당 스크립트에서 이를 쉘로 명시적으로 사용하고 있습니다 . 이 줄을 다음과 같이 다시 작성해야 합니다.
wine "C:/D2GS/D2GS.exe" > /dev/null 2>&1 &
답변2
>&
~이다시추zsh
bash
stdout 및 stderr을 파일로 리디렉션하는 구문(최신 버전에서도 지원됨 )
sh
(Bourne(원본) 및 POSIX) 에서 리디렉션 구문 1은 다음과 같습니다.
if ! pgrep D2GS > /dev/null; then
wine C:/D2GS/D2GS.exe > /dev/null 2>&1 &
fi
(또한 잘못된 ps/pgrep 구문이 있습니다. 표준 입력을 읽지 않으므로 pgrep
출력을 파이프로 연결할 ps
필요가 없습니다 .)
완전성을 위해 다양한 셸에서 stdout 및 stderr을 리디렉션하는 구문은 다음과 같습니다.
> file 2>&1
: Bourne, POSIX 및 그 파생어와 피쉬>& file
:csh, tcsh, zsh 및 bash 4+ (이것은 파일 이름이 일련의 십진수가 아닌 경우에만 작동하고 그렇지 않으면 Bourne 리디렉션 연산자입니다zsh
) .bash
>&fd
&> file
:bash 및 zsh 3+> file >[2=1]
: rc 및 파생 상품> file ^&1
: 물고기
1 !
자체는 Korn 쉘과 함께 도입되었으며 Bourne 쉘에서는 사용할 수 없습니다. 하지만 POSIX에 의해 지정되었으므로 최신 구현 sh
에서 사용할 수 있어야 합니다 .sh