1


私の Mac は、最後の行で、この bash スクリプトの予期しないファイルの終わりを通知し続けます。私はプログラミングは初めてではありませんが、BASH は初めてです。

#!/bin/bash  
#bootstrapper.sh
PIDD="$5"
while sleep 1; do kill -0 $PIDD || break; done
# Absolute path to this script. /home/user/bin/foo.sh
SCRIPT=$(readlink -f $0)
# Absolute path this script is in. /home/user/bin
SCRIPTPATH=`dirname $SCRIPT`
POSPAR1="$1" #-l
POSPAR2="$2" #location
POSPAR3="$3" #-d
POSPAR4="$4" #directory
cp -r -f $SCRIPTPATH/$4/* $2
rm -r -f $SCRIPTPATH/$4

前もって感謝します!

4

2 に答える 2

2

私はあなたのコードを Mac の質問からコピーし (コピー&ペースト)、次のコマンドでファイルを実行しました:

bash -n -v x.sh

実際、私はそれを 2 回行いました。最初はファイルの最後に改行があることを確認し、2 回目は改行がないことを確認しました。そして、bash はどちらの場合も非常に満足していました。

これは、問題が表示されている文字にないことを示しています。ファイルには目に見えない文字がいくつかあり、悲しみを引き起こしています。od -cおそらく、問題の原因となっている文字を見つけるなどのツールを使用してファイルを精査する必要があります。

また、FWIW、readlink私の Mac のコマンドは次のようになります。

$ readlink -f $0
readlink: illegal option -- f
usage: readlink [-n] [file ...]
$

の Linux バージョンreadlink-f. これは POSIX コマンドではないため、参照すべき正式な標準はありません。

于 2011-03-20T03:40:23.490 に答える
0


od -cを使用してファイルを分析すると、行末が\ r \ nであることがわかりました。私は、Windowsでファイルを変更しました。ばかげています。とにかく、BASHスクリプトで別の問題が発生しています。この行:

while sleep 1; do kill -0 $PIDD || break; done

PID(変数$ PIDDに格納されている)が閉じるまで待機することになっています。存在しなくなるまで(PID)待機しますが、最終的に存在しなくなると、次のように出力されます。kill:4:そのようなプロセスはありません。スクリプトの残りの部分は意図したとおりに機能しますが、スクリプトは終了しません。スクリプトを正しく終了させて​​、そのようなプロセスが出力されないようにすることはできますか?
初心者の質問はすべて申し訳ありませんが、BASHとLinuxはひどいです。
あなたのご親切に感謝します。

于 2011-03-20T23:44:24.030 に答える