Je ne parviens pas à insérer le contenu de la commande pwd
dans une variable Shell à utiliser ultérieurement.
Voici mon code Shell (la boucle ne s'arrête pas):
#!/bin/bash
pwd= `pwd`
until [ $pwd = "/" ]
do
echo $pwd
ls && cd .. && ls
$pwd= `pwd`
done
Pourriez-vous repérer mon erreur, s'il vous plaît?
Essayer:
pwd=`pwd`
ou
pwd=$(pwd)
Remarquez pas d'espaces après le signe égal.
Aussi, comme le souligne M. Weiss; vous n'affectez pas à $pwd
, vous affectez à pwd
.
Dans Shell, vous affectez une variable sans le signe dollar:
TEST=`pwd`
echo $TEST
c'est mieux (et peut être imbriqué) mais n'est pas aussi portable que les backtics:
TEST=$(pwd)
echo $TEST
Rappelez-vous toujours: le signe dollar n'est utilisé que lors de la lecture d'une variable.
Dans ce cas spécifique, notez que bash a une variable appelée PWD
qui contient le répertoire en cours: $PWD
est équivalent à `pwd`
. (Tout comme les autres shells, il s'agit d'un fonctionnalité standard .) Vous pouvez donc écrire votre script de la manière suivante:
#!/bin/bash
until [ "$PWD" = "/" ]; do
echo "$PWD"
ls && cd .. && ls
done
Notez l'utilisation de guillemets doubles autour des références de variable. Ils sont nécessaires si la variable (ici, le répertoire en cours) contient des espaces ou des caractères génériques (\[?*
), car le shell scinde le résultat des extensions de variable en mots et effectue une analyse globale de ces mots. Cochez toujours les extensions de variable "$foo"
et les substitutions de commandes "$(foo)"
(sauf si vous savez que ce n'est pas obligatoire).
Dans le cas général, comme d'autres réponses l'ont déjà mentionné:
var=value
, pas var = value
$
signifie “prend la valeur de cette variable”, vous ne l'utilisez donc pas lors de l'attribution de: var=value
, pas $var=value
Vous pouvez également faire des commandes beaucoup plus complexes, juste pour compléter les exemples ci-dessus. Alors, disons que je veux obtenir le nombre de processus en cours d'exécution sur le système et le stocker dans la variable $ {NUM_PROCS}.
Tout ce que vous avez à faire est de générer le pipeline de commandes et d'insérer sa sortie (le nombre de processus) dans la variable.
Cela ressemble à quelque chose comme ça:
NUM_PROCS=$(ps -e | sed 1d | wc -l)
J'espère que cela aidera à ajouter des informations utiles à cette discussion.
Voici votre script ...
DIR=$(pwd)
echo $DIR
while [ "$DIR" != "/" ]; do
cd ..
DIR=$(pwd)
echo $DIR
done
Notez les espaces, l'utilisation des guillemets et des signes $.