내 응용 프로그램:
#!/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 &
아무 문제 없이 실행됩니다. 쉘에서 시작하려는 이유는 매분마다 크론탭을 실행하고 싶기 때문입니다.
답변1
>&
은(는) 에서 지원하는 구문이 아닙니다 sh
. sh
해당 스크립트에서 명시적으로 셸을 사용하고 있습니다 . 해당 줄을 다음과 같이 다시 작성해야 합니다.
wine "C:/D2GS/D2GS.exe" > /dev/null 2>&1 &
답변2
>&
은cshstdout 및 stderr을 모두 파일로 리디렉션하는 구문( zsh
의 최신 버전 에서도 지원됨 )입니다.bash
sh
(Bourne(출처) 및 POSIX) 에서 리디렉션 구문은 다음과 같습니다.
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 및 파생상품과 fish>& file
: csh, tcsh, zsh 및 bash 4+(단, 파일 이름이 일련의 십진수가 아닌 경우에만 해당되며 그렇지 않으면zsh
Bourne 리디렉션 연산자입니다).bash
>&fd
&> file
: bash 및 zsh 3+> file >[2=1]
: rc 및 파생 상품> file ^&1
: 물고기
¹ !
자체는 Korn 셸에서 도입되었으며 Bourne 셸에서는 사용할 수 없지만 sh
POSIX에서 지정되었으므로 최신 sh
구현에서 사용할 수 있습니다.