Les caractères generics ne sont pas substitués

#!/bin/bash loc=`echo ~/.gvfs/*/DCIM/100_FUJI` rm -f /mnt/fujifilmA100 ln -s "$loc" /mnt/fujifilmA100 

Pour une raison quelconque, la variable * ne se substitue pas à la seule valeur possible et reçoit la valeur /home/chris/.gvfs/*/DCIM/100_FUJI. Est-ce que quelqu'un a une idée de pourquoi?

Notez s'il vous plaît:

  • Si l'expansion globale échoue, le motif n'est pas remplacé. J'ai exécuté les commands:

    chris @ comp2008: ~ $ loc = “ echo ~ / .gvfs / * / DCIM / 100_FUJI

    chris @ comp2008: ~ $ echo $ loc

    /home/chris/.gvfs/gphoto2 mount on usb% 3A001,008 / DCIM / 100_FUJI

    Nous pouvons donc voir que l'expansion devrait fonctionner

  • J'ai maintenant changé d'utilisation:

    loc = “ find ~ / .gvfs -name 100_FUJI

    Je suis curieux de savoir pourquoi cela ne fonctionne pas tel quel.

  • Débogage de sortie en utilisant sh -x

echo /home/chris/.gvfs/*/DCIM/100_FUJI

loc = / home / chris / .gvfs / * / DCIM / 100_FUJI

rm-f / mnt / fujifilmA100

ln -s /home/chris/.gvfs/*/DCIM/100_FUJI/mnt/fujifilmA100

4 Solutions collect form web for “Les caractères generics ne sont pas substitués”

Vous avez mentionné dans votre réponse à Tactical Vim que vous exécutez ceci sous sudo – ' ~ ' va être étendu différemment sous sudo vs sous votre user normal. Changez-le sur ' ~chris ' ou codez votre directory personnel.

Êtes-vous sûr de vous être entré dans le file .sh exactement comme indiqué ici? Je viens de faire un script de test exactement comme vous et cela fonctionne pour moi.

Peut-être quelque chose à voir avec l'étrange nom du directory avec des espaces,% -signs et des virgules?

Essayez d'exécuter votre script sous 'sh -x' pour voir une sortie de debugging, peut-être que cela fournira un indice. Je n'ai jamais vu l'écho utilisé dans ce genre de path, cela pourrait être lié à cela; Est-ce que cela fonctionne si vous remplacez 'echo' par 'ls -d' (ou similaire, pas sûr de votre sortie) à la place?

D'accord, j'ai modifié mon script comme suit:

 loc=`echo ~chris/.gvfs/*/DCIM/` sudo rm -f /mnt/camera sudo ln -s "$loc" /mnt/camera 

Notez que les sudo sont dans le script

  • ls -m avec plus d'informations?
  • Comment puis-je get le code de sortie d'un process qui est diffusé en T?
  • Récupération d'une valeur spécifique à partir de "df -h" à l'aide d'un shell
  • Conseils interactifs sur les coquilles?
  • Trouver l'adresse IP publique dans un script shell
  • Comment puis-je get une sortie entière sur BSD ping?
  • Nombre d'octets passés d'un process à l'autre
  • Le script Shell n'exécutera pas le file de script ruby
  • Un script de ligne pour vérifier et réagir à l'utilisation de la memory
  • Comment supprimer tout EXCEPT Quelques files?
  • Où mettre mon backup.sh?
  • Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de rĂ©seau.