1. ホーム
  2. bash

[解決済み] bash file returns unexpected token `$'dottpr''

2022-02-26 23:39:02

質問

ネットでこのスクリプトを見つけ、使おうとしました。

#!/bin/sh
# Target directory
TARGET=$3
echo "Copying to $TARGET"
for i in $(git diff --name-only $1 $2)
    do
        # First create the target directory, if it doesn't exist.
        mkdir -p "$TARGET/$(dirname $i)"
        # Then copy over the file.
        cp "$i" "$TARGET/$i"
    done
echo "Done";

オンラインで検証してみましたが、スクリプトは問題ないです。また、いろいろと変更してみましたが、私にはうまくいきません。

などを実行してみたりしています。

#!/bin/sh
# Target directory
TARGET=$3
echo "Copying to $TARGET"
for i in $(ls)
do
    echo "text"
done

そして、やはり同じエラーが発生します。

./git-copy.sh: line 6: syntax error near unexpected token `$'do\r''
'/git-copy.sh: line 6: `do

それはなぜか?

どうすれば解決するの?

あなたのスクリプトはDOSまたはWindowsベースのシステムで編集され、Linux/Unixが好まないキャリッジリターン文字が含まれています(その内容は \r です)。この場合 dos2unix を使えば、キャリッジリターンの行末を正しい形式に変換することができます。 dos2unix を使用することができます。 awk のように

awk '{ sub("\r$", ""); print }' git-copy.sh > git-copy2.sh
mv git-copy2.sh git-copy.sh