2

問題の概要:ターミナルに入力するとスクリプトは正常に機能しますが、.shファイルからターミナルで実行すると正しく機能しません。これはなぜですか?

脚本:

echo World of Clucky - Frisnuk "\033]0;Frisnuk - World of Clucky\a"
#! /usr/bin/env bash
BINDIR="$(dirname "$(readlink -fn "$0")")"
cd "$BINDIR"
while true
do
source /home/clucky/MinecraftServers/Frisnuk/serverconfig/config.sh
#Start Server
    java -Xms2000M -Xmx2000M -jar $serverjar.jar nogui
    if [ "`date +%w%H`" = "001" ]
    then
#Delete map files for The End
    rm -R /Frisnuk_the_end
    echo "End has been successfully reloaded"
    echo "[`date +%D\ %T`] End Reloaded" >> /home/clucky/MinecraftServers/Frisnuk/EndRestart.txt
#Change Item of The Week
    weekofyear=`date +%y\-%U`
    s=$(<serverconfig/ItemofTheWeek/item$weekofyear.txt)
    set -- $s
    itemoftheweekid=$2
    itemoftheweekprice=$3
    xmlstarlet edit -L -u "/scs-shop/itemStack[@type='double']" -v $itemoftheweekid /plugins/ShowCaseStandalone/ffs-storage/ffss_cac8480951254352116d5255e795006252d404d8
    xmlstarlet edit -L -u "/scs-shop/price[@type='double']" -v $itemoftheweekprice /plugins/ShowCaseStandalone/ffs-storage/ffss_cac8480951254352116d5255e795006252d404d8
fi
echo "If you want to stop the restart and shut the server off instead, please press Ctrl+C at this time"
for i in 5 4 3 2 1
do
    echo "$i..."
    sleep 1
done
echo "Restarting Server"
clear
done

サーバーを動作させて実行する代わりに、次のように表示されます。

World of Clucky - Frisnuk 
/home/clucky/MinecraftServers/Frisnuk/craftminecraft.sh: 7: /home/clucky/MinecraftServers/Frisnuk/craftminecraft.sh: source: not found

Error: Unable to access jarfile .jar
If you want to stop the restart and shut the server off instead, please press Ctrl+C at this time
5...
4...
3...
2...
1...

間もなくシャワーを浴びますが、今夜遅くか明日の朝に戻ってきます。よろしくお願いします。

4

1 に答える 1

9

シェバンの前に置くechoので、スクリプトはではdashなく、によって解釈されますbash

dashsource標準ではないため、は含まれていません。

あなたのシバンを修正してください、そしてそれはトリックをします。


スクリプトの標準的な方法はsource、でスクリプトを実行すること.です。

の代わりにsource ./myScript.sh、あなたはします. ./myScript.sh。それらはで同じですbash

于 2012-11-17T02:46:05.753 に答える