0

上周我一直试图让它工作,但无法弄清楚为什么这不起作用。我直接在终端中输入混合结果,但从 .sh 运行时不断收到语法错误消息。使用 Ubuntu 11.10

看起来 mount 命令的一部分被推到下一行,不允许它正确完成。我不知道为什么会发生这种情况,也不知道如何防止它进入第二行。

我在 mounts.txt 中有几行定义如下,从下面的 mount-drives.sh 中读取

我已经使用 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

在黑暗中刺伤(阅读评论后)。"$pass" 正在选择换行符,因为 mounts.txt 是在 windows 中创建的并且具有 windows 行结尾。尝试将echo $pass行更改为:

echo ---${pass}---

看看它是否全部正确显示。

于 2012-06-06T04:56:20.173 回答
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 回答