Sudo et commande dans une variable

Command not found

Le problème exposé dans ce sujet a été résolu.

Bonjour,

Je n’arrive pas à utiliser sudo avec une variable. Comment dois-je faire ?

1:
#ok
2:
sudo: apt-get install git: command not found

Avec :

dep=git
packagingTool_install="apt-get install"
echo "sudo $packagingTool_install $dep"
echo "1:"
sudo apt-get install git
echo "2:"
sudo "$packagingTool_install $dep"

Bon vol,

A.

C’est ton "apt-get install", le problème, pas sudo. Chez moi (avec un autre système, mais le point est le même) :

a=zypper
b=install
c=cmake
sudo $a $b $c

marche bien, mais

ab="zypper install"
c=cmake
sudo $ab $c

plante.

+0 -0

dep=git
packagingTool_install="apt-get install"
echo "sudo $packagingTool_install $dep"
echo "1:"
sudo apt-get install git
echo "2:"
sudo $packagingTool_install $dep

Devrait faire le taf ^^"

J’ai juste retirer les guillemets. Tu comprends pourquoi ?

+0 -0

Devrait faire le taf ^^"

Tu as testé ? Parce que quand je fais ça (en l’adaptant à ma distro), ça ne marche pas. J’ai un beau

sudo: zypper install : commande introuvable
+0 -0
* [+packages] installing packages (this subcommand will be run as super-user)
1. Arch - Utilisation de pacman
2. Debian - Utilisation de apt-get / Testé sur : Debian Jessie
3. Fedora - Utilisation de dnf
4. Ubuntu - Utilisation de apt-get / Testé sur : Ubuntu 14.04
Choix : 2
/home/a312/zds/zds-site/scripts/dependencies/debian.txt
sudo apt-get -qq -y git
sudo: apt-get install: command not found
`git` not found, press `y` to continue the script.

J’avais rajouté les guillemets parce que sans ça ne fonctionnait pas non plus :

https://travis-ci.org/zestedesavoir/zds-site/builds/504245539#L284

https://github.com/zestedesavoir/zds-site/pull/5270/files#diff-274a60b0ab6647fec4039dd42d3df381R161

@Gabbro : Comment puis adapter ton exemple à ce que je souhaite faire ? Je voudrais avoir une seule variable avec les arguments de la commande.

+0 -0

Devrait faire le taf ^^"

Tu as testé ? Parce que quand je fais ça (en l’adaptant à ma distro), ça ne marche pas. J’ai un beau

Gabbro

Nope, mais en toute logique, ça devrait faire le taf. Là, c’est comme si tu avais passé "zypper install" en premier paramètre.

J’ai testé, du coup, ben ça marche ^^"

#!/bin/bash

dep=git
packagingTool_install="pacman -S"
echo "sudo $packagingTool_install $dep"
echo "1:"
# sudo apt-get install git
echo "2:"
sudo $packagingTool_install $dep

Bon, je sais pas pourquoi ça marche pas chez vous, ce devrait marcher. Mais dans l’idée, le premier paramètre doit juste être la commande. En séparant commande et argument, ça devrait marcher peu importe la manière.

#!/bin/bash

dep=git
installCmd=pacman
installOpt="-S"
echo "sudo $packagingTool_install $dep"
echo "1:"
# sudo apt-get install git
echo "2:"
sudo $installCmd "$installOpt $dep"

Toujours pas testé mais ça devrait marcher.

+0 -0

Je voudrais avoir une seule variable avec les arguments de la commande.

Je ne sais pas. Si tu sépare commande et argument, ça va marcher sans problème. Mais avec une seule variable, je n’en ai aucune idée.

Bon, je sais pas pourquoi ça marche pas chez vous, ce devrait marcher.

J’ai peut-être trouvé ! Ça ne marche pas avec zsh, mais ça marche avec bash. :D Pour zsh, je lui demande d’exécuter la commande zypper install, or ce programme (en un mot), n’existe pas, donc ça plante. Il faut lancer zypper avec l’argument install. C’est différent. Pas pour bash.

Donc, si c’est bien ça le problème, c’est une façon de faire à éviter, car spécifique à bash et sh (qui a le même comportement après test).

+0 -0

Ah oui d’accord x")

Les shells alternatifs font généralement ça. http://zsh.sourceforge.net/FAQ/zshfaq03.html#l18

En même temps, si on utilise pas bash, il faut le préciser. Les shells ne sont en général pas compatible entre eux.

+0 -0

Je ne comprends pas quand je fais le code ci-dessous ça fonctionne.

cmd="apt-get -y install"
dep="git"
sudo $cmd $dep

Par contre si je fais avec install_zds.sh ceci ne fonctionne pas :

sudo apt-get -y install git
sudo: apt-get -y install: command not found
`git` not found, press `y` to continue the script.

Avec :

        echo "sudo $packagingTool_install $dep"
        sudo $packagingTool_install $dep
+0 -0

Pardon, mais je ne comprend pas bien ton problème.

Déjà, pour être sur qu’on parle de la même chose. Si ton premier code fonctionne, c’est que tu utilises un shell « bourne », (sh, dash, bash largement le plus utilisé, …). Là plupart des autres types de shell n’utilise pas cette fonctionnalité car ils considèrent (à raison !) que c’est une source importante de bug (et donc problème de sécurité !).

Ensuite, que contient ton fichier install_zds.sh précisément ? S’il t’affiche sudo: apt-get -y install c’est qu’il reçoit comme premier argument une chaîne avec des espaces, ce qui ne devrait pas arriver. (c.f. man 3 execl pour comprendre un peu le fonctionnement de sudo).


Edit: j’avais pas vu ton deuxième edit. Du coup, je soupçonne que ton script ne se lance pas avec bash mais un autre shell. Rajoute un shebang comme première ligne de ton script bash.

#!/bin/bash
+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte