0

先週、これを機能させようとしてきましたが、なぜこれが機能しないのかわかりません。ターミナルに直接入力すると結果がまちまちですが、.sh から実行すると構文エラー メッセージが表示され続けます。ubuntu 11.10を使用

マウント コマンドの一部が次の行にプッシュされ、適切に完了できないようです。なぜこれが起こっているのか、2 行目に移動しないようにする方法がわかりません。

以下のmount-drives.shから読み取られるmounts.txtに次のように定義されたいくつかの行があります

sudo を使用して実行するように呼び出したので、権限の問題ではありません。

ご覧いただきありがとうございます。追加情報が必要な場合はお知らせください。

mounts.txt

    mountname,//server/share$,username,password,

mount-drives.sh ---オリジナル、以下に更新

    #!/bin/bash
    while read LINE;
    do 

    # split lines up using , to separate variables
    name=$(echo $LINE | cut -d ',' -f 1)
    path=$(echo $LINE | cut -d ',' -f 2)
    user=$(echo $LINE | cut -d ',' -f 3)
    pass=$(echo $LINE | cut -d ',' -f 4)

    echo $name
    echo $path
    echo $user
    echo $pass


    location="/mnt/test/$name/"

    if [ ! -d $location ]
    then
        mkdir $location
    fi

    otherstuff="-o rw,uid=1000,gid=1000,file_mode=0777,dir_mode=0777,username=$user,password=$pass"

    mount -t cifs $otherstuff $path $location

    done < "/path/to/mounts.txt";

mount-drives.sh ---更新

    #!/bin/bash

    while read LINE
    do
        name=$(echo $LINE | cut -d ',' -f 1)
        path=$(echo $LINE | cut -d ',' -f 2)
        user=$(echo $LINE | cut -d ',' -f 3)
        pass=$(echo $LINE | cut -d ',' -f 4)
        empty=$(echo $LINE | cut -d ',' -f 5)
        location="/mount/test/$name/"
        if [ ! -d $location ]
        then
            mkdir $location
        fi
        mounting="mount -t cifs $path $location -o username=$user,password=$pass,rw,uid=1000,gid=1000,file_mode=0777,dir_mode=0777"
        $mounting
        echo $mounting >> test.txt
     done < "/var/www/MediaCenter/mounts.txt"
4

2 に答える 2

0

ここには、改善に耐えられるものがたくさんあります。次のアプローチを検討してください。はるかにコンパクトで、はるかに正確です。

while IFS=, read -u 3 -r name path user pass empty _; do
  mkdir -p "$location"
  cmd=( mount \
    -t cifs \
    -o "rw,uid=1000,gid=1000,file_mode=0777,dir_mode=0777,username=$user,password=$pass" \
    "$path" "$location" \
  )
  printf -v cmd_str '%q ' "${cmd[@]}" # generate a string corresponding with the command
  echo "$cmd_str" >>test.txt          # append that string to our output file
  "${cmd[@]}"                         # run the command in the array
done 3<mounts.txt

元のものとは異なり、パスまたは場所の値に空白が含まれていても、これは正しく機能します。

于 2014-09-17T20:54:48.727 に答える