我做了一个非常简单的shell脚本:
#!/bin/bash
/usr/bin/mount -v --bind "\""$1"\"" "\""$2"\""
echo $?
exit 0
Run Code Online (Sandbox Code Playgroud)
脚本执行失败,错误代码为 1:
./mymount "/storage/Some folder" "/storage/temp"
Run Code Online (Sandbox Code Playgroud)
从命令行工作正常:
mount -v --bind "/storage/Some folder" "/storage/temp"
Run Code Online (Sandbox Code Playgroud)
Selinux 被禁用。
我错过了什么吗?
ter*_*don 14
每当您遇到此类问题时,set -x就是您的朋友。将您的脚本更改为此并再次运行它:
#!/bin/bash
set -x
/usr/bin/mount -v --bind "\""$1"\"" "\""$2"\""
echo $?
exit 0
Run Code Online (Sandbox Code Playgroud)
这将显示以下输出:
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
Run Code Online (Sandbox Code Playgroud)
如您所见,实际运行的是:
/usr/bin/mount -v --bind '"/storage/Some' 'folder"' '"/storage/temp"'
Run Code Online (Sandbox Code Playgroud)
发生这种情况是因为你有"\""$1"\"",所以,而不是$1,传递给的mount是"$1",包括引号,就好像它们是目录名称的一部分。你想要做的是:
#!/bin/bash
set -x
/usr/bin/mount -v --bind "$1" "$2"
echo $?
exit 0
Run Code Online (Sandbox Code Playgroud)