A montagem falha no script de shell

3

Eu fiz um script de shell muito simples:

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

A execução do script falha com o código de erro 1 para:

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

Da linha de comando funciona bem:

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

Selinux está desativado.

Estou sentindo falta de algo?

    
por Narcis Radu 10.01.2018 / 15:36

1 resposta

14

Sempre que você tiver esse tipo de problema, set -x é seu amigo. Altere seu script para isso e execute-o novamente:

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

Isso mostrará a seguinte saída:

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

Como você pode ver, o que realmente está sendo executado é:

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

Isso acontece porque você tem "\""$1"\"" , então, em vez de $1 , o que está sendo passado para mount é "$1" , com as aspas incluídas como se fossem parte do nome do diretório . O que você quer fazer é:

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

Tags