我做了一个非常简单的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