Linux 我的命令在终端上工作,但在pi中的脚本上不工作

Linux 我的命令在终端上工作,但在pi中的脚本上不工作,linux,bash,shell,mount,pi,Linux,Bash,Shell,Mount,Pi,所以我尝试执行命令:sudomount/dev/sda1/mnt/usb-oud=pi,gid=pi 它工作并将我的USB安装到/mnt/USB目录 所以我想创建一个基本上如下的脚本: #!/bin/bash sudo mount /dev/sda1 /mnt/usb -o uid=pi,gid=pi echo "Script Worked" 并将其别名为usbmount 当我在终端中调用usbmount时,我得到了脚本的输出 但USB似乎没有安装。我确保命令正常工作,我查看了

所以我尝试执行命令:sudomount/dev/sda1/mnt/usb-oud=pi,gid=pi

它工作并将我的USB安装到/mnt/USB目录

所以我想创建一个基本上如下的脚本:

#!/bin/bash
    sudo mount /dev/sda1 /mnt/usb -o uid=pi,gid=pi
    echo "Script Worked"
并将其别名为usbmount

当我在终端中调用usbmount时,我得到了脚本的输出

但USB似乎没有安装。我确保命令正常工作,我查看了fstab数据,它也是正确的

我错过了什么?有什么问题吗

编辑: 当我试着写剧本的时候/bin/bash-e,它表示mount:uid=pi,gid=pi:mount-point不存在

编辑2: 添加sudo mkdir/media/usb;sudochown-rpi:pi/media/usb在脚本开始时也不起作用

编辑3:* 更新后的脚本如下所示:

#!/bin/bash -e
    sudo mkdir /mnt/usb; sudo chown -R pi:pi /mnt/usb
    sudo mount -o /dev/sda1 /mnt/usb uid=pi,gid=pi


echo "Script Worked"
我得到的结果是:

mkdir: cannot create directory ‘/mnt/usb’: File exists
mount: uid=pi,gid=pi: mount point does not exist.
Script Worked
您移动了-o选项,但没有移动其参数。o开关和紧跟其后的字符串是一个单元

另外,请尝试mkdir-p以避免收到错误消息。但是请注意,错误消息表明命令试图使用uid=pi,gid=pi作为装载点;也许mkdir一直以来都是不必要的

!/垃圾箱/垃圾箱 set-e sudo mkdir-p/mnt/usb sudo chown-R pi:pi/mnt/usb sudo挂载-o uid=pi,gid=pi/dev/sda1/mnt/usb 回音脚本起作用了 因为这里没有特定于Bash的代码,所以我切换到了sh。我将-e选项移到了脚本中,因此无论您如何准确地运行脚本


也许在某种程度上,最好去掉sudo命令,如果用户没有权限或无法使用sudo运行脚本,就让脚本失败。那么脚本也适合以root用户身份运行。

我觉得不错。也许可以删除sudo并改用sudo./usbmount?另外,将选项-o直接放在mount之后。混合这些可能会导致不想要的结果。AFAIK每个命令总是[CMD][OPTS][ARGS]。用-e测试它/bin/bash-e或类似的sudo mount/dev/sda1/mnt/usb-o uid=pi,gid=pi&&echo ok | | echo failIs/media/usb there?,是否需要添加sudo mkdir/media/usb;sudo chown-R pi:pi/media/usb到脚本中?将选项置于位置参数之前。其他任何东西都是不可移植的。也就是说,mount-ouid=pi,gid=pi/dev/sda/media/usb。即使您当前的操作系统没有强制您遵循POSIX标准约定,您也应该习惯这样做,这样您的脚本在更严格的兼容平台上运行时不会中断。@Bayou,仅供参考,该规范指示该约定为;见末尾列表中的准则9。