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

  • Le script Shell n'exécutera pas le file de script ruby
  • Putty supprime définitivement l'authentification GSSAPI
  • ls -m avec plus d'informations?
  • Utilisation de telnet dans un script shell
  • Commande de préciser la chaîne à chaque ligne?
  • Un moyen facile de stocker et d'accéder aux commands couramment utilisées?
  • Accès à toutes les variables passées à un script shell à partir d'un index donné
  • Choisir le shell que SSH utilise?
  • Quelle est la différence entre les drapeaux de tableau unique et de double tiret sur les commands de shell?
  • Puis-je utiliser EC2 comme coquille Unix random?
  • Trouver l'adresse IP publique dans un script shell
  • Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de rĂ©seau.