나는 이것에 접근하고 있습니다 :
myif() {
if ([ $1 ]) then
shift
$*
true
else
shift
shift
$*
false
fi
}
주요 부분이 if ([ $1 ]) then
잘못되었습니다. 나는 다음 세 가지 일을 할 수 있기를 원합니다.
# boolean literals, probably passed in as the output to variables.
myif true successhandler failurehandler
myif false successhandler failurehandler
# a function to be evaluated
myif checkcondition successhandler failurehandler
checkcondition() {
true
# or:
# false, to test
}
파일을 확인하는 방법은 다음과 같습니다.
file_exists() {
if ([ -e $1 ]) then
shift
$*
true
else
shift
shift
$*
false
fi
}
이 3가지 사례를 처리하면서 첫 번째 예제를 작동하게 만드는 방법이 궁금합니다. 나는 또한 eval
이것을 사용하고 수행해 보았습니다.
myif() {
if ([ "$*" ]) then
shift
$*
true
else
shift
shift
$*
false
fi
}
하지만.
답변1
을 실행하려는 것으로 보이며 $1
성공 또는 실패에 따라 $2
또는 을 실행합니다 $3
. 한 가지 방법은 다음과 같습니다.
successhandler() {
echo GREAT SUCCESS
}
failurehandler() {
echo sad failure
}
checkcondition() {
if (( RANDOM < 15000 ))
then
true
else
false
fi
}
myif() {
# disable filename generation (in case globs are present)
set -f
if $1 > /dev/null 2>&1
then
$2
true
else
$3
false
fi
}
여기서는 동작을 보여주기 위해 임의 버전의 성공 핸들러, 실패 핸들러 및 체크 조건을 만들었습니다.
다음은 몇 가지 실행 예시입니다.
$ myif true successhandler failurehandler
GREAT SUCCESS
$ myif false successhandler failurehandler
sad failure
$ myif 'test -f /etc/hosts' successhandler failurehandler
GREAT SUCCESS
$ myif 'test -f /etc/hosts/not/there' successhandler failurehandler
sad failure
$ myif checkcondition successhandler failurehandler
GREAT SUCCESS
$ myif checkcondition successhandler failurehandler
sad failure
$ myif checkcondition successhandler failurehandler
GREAT SUCCESS
$ myif checkcondition successhandler failurehandler
sad failure
$ myif checkcondition successhandler failurehandler
sad failure
내부적 으로는 myif()
stdout과 stderr을 특별히 제거했습니다 ./dev/null