非常に単純なシェルスクリプトを作成しました。
#!/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