1 votes

Shell Shell fichier (.sh) - commande dynamique

J'essaie de créer une commande dynamique à exécuter dans un fichier .sh. Cependant, lorsque j'y parviens, il semble que l'on ajoute en quelque sorte \r de sorte que la commande n'est pas correctement exécutée.

Notez que je l'exécute sous Windows, en utilisant bash.exe. Un exemple de code :

Mon fichier command.cmd :

bash --login -x command.sh Parameter1

Mon fichier .sh :

#!/bash
#export PATH=.
cmd="ssh-agent bash -c 'ssh-add /cygdrive/C/$1/id_rsa & lftp -u myUser, -e \"mirror --verbose / /cygdrive/C$1/Output; bye\" sftp://domain.com -p 22'"
eval "$cmd"

Si j'exécute la commande de manière statique, elle fonctionne parfaitement :

ssh-agent bash -c 'ssh-add /cygdrive/C/$1/id_rsa & lftp -u myUser, -e \"mirror --verbose / /cygdrive/C$1/Output; bye\" sftp://domain.com -p 22'

Mais si je l'exécute tel quel sur le fichier .sh, le résultat est le suivant :

C:\MyFolder\bin>command.cmd

C:\MyFolder\bin>bash --login -x command.sh Parameter1
+ cmd='ssh-agent bash -c '\''ssh-add /cygdrive/C/Parameter1/id_rsa & lftp -
u myUser, -e "mirror --verbose / /cygdrive/C/Parameter1/Output; bye" sft
'://sftp.domain.com -p 22'\''
+ eval 'ssh-agent bash -c '\''ssh-add /cygdrive/C/Parameter1/id_rsa & lftp
-u myUser, -e "mirror --verbose / /cygdrive/C/Parameter1/Output; bye" sf
'p://sftp.domain.com -p 22'\''
++ ssh-agent bash -c 'ssh-add /cygdrive/C/Parameter1/id_rsa & lftp -u myUser, -e "mirror --verbose / /cygdrive/Parameter1/Output; bye" sftp://sft
'.domain.com -p 22
Identity added: /cygdrive/id_rsa (rsa w/o comment)
'] `/' [Bad port '22.]

Je pense qu'étant donné que le système fonctionne sous Windows, quelque chose n'est pas bien formé dans la variable de commande dynamique, de sorte que la commande ne s'exécute pas correctement. Si, au lieu de eval, j'exécute echo, la sortie est la suivante :

C:\MyFolder\bin>command.cmd

C:\MyFolder\bin>bash --login -i command.sh Parameter1
ssh-agent bash -c 'ssh-add /cygdrive/C/Parameter1/id_rsa & lftp -u myUser, -e "mirror --verbose / /cygdrive/C/Parameter1/Output; bye" sftp://sftp.domain.com -p 22'

Ce qui semble parfait.

Qu'est-ce que je ne fais pas ici ?

Nous vous remercions.

1voto

Leathan Points 111

Je me suis rendu compte que c'était Windows qui ajoutait des caractères non valides. Avec Notepad++, l'enregistrement sous Unix/Linux a fonctionné comme un charme.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X