shell 脚本中挂载失败

shell 脚本中挂载失败

我做了一个非常简单的shell脚本:

#!/bin/bash
/usr/bin/mount -v --bind "\""$1"\"" "\""$2"\""
echo $?
exit 0

脚本执行失败,错误代码为 1:

./mymount "/storage/Some folder" "/storage/temp"

从命令行工作正常:

mount -v --bind "/storage/Some folder" "/storage/temp"

Selinux 被禁用。

我错过了什么吗?

答案1

每当您遇到此类问题时,set -x它就是您的朋友。将脚本更改为此并再次运行:

#!/bin/bash
set -x
/usr/bin/mount -v --bind "\""$1"\"" "\""$2"\""
echo $?
exit 0

这将向您显示以下输出:

terdon@tpad ~ $ sudo foo.sh "/storage/Some folder" "/storage/temp"
+ /usr/bin/mount -v --bind '"/storage/Some' 'folder"' '"/storage/temp"'
mount: bad usage
Try 'mount --help' for more information.
+ echo 1
1
+ exit 0

正如你所看到的,实际运行的是:

/usr/bin/mount -v --bind '"/storage/Some' 'folder"' '"/storage/temp"'

发生这种情况是因为你有"\""$1"\"",所以$1传递给的mount"$1"包含引号,就好像它们是目录名称的一部分一样。你想做的是:

#!/bin/bash
set -x
/usr/bin/mount -v --bind "$1" "$2"
echo $?
exit 0

相关内容