Script Bash - store trouver la sortie de la commande sans les espaces dans la variable
Je suis à la recherche d'automatiser mes projets xcode. Tout fonctionne bien sauf les projets de nom avec des espaces. J'ai essayé les commandes suivantes:
output_apps=`find ./-name "*.app" -print`
output_apps=`find ./-name "*.app"`
Quand je lance
find ./ -name "*.app" -print
sans avoir à les stocker dans la variable, il me donne de sortie comme prévu, comme indiqué ci-dessous:
.//Ten EU.app
.//Ten Official App EU.app
.//Ten Official App.app
.//Ten.app
Cependant, quand je stocker le résultat de la commande ci-dessus dans une variable comme ci-dessous
output_apps=`find ./-name "*.app" -print`
et puis exécutez la procédure suivante pour la boucle pour obtenir les noms
for curr_app in $o
do
echo "$curr_app"
done
Il montre
.//Ten
EU.app
.//Ten
Official
App
EU.app
.//Ten
Official
App.app
.//Ten.app
Comment dois-je entretenir les espaces entre chaque sortie et obtenir la sortie suivante?
Ten EU.app
Ten Official App EU.app
Ten Official App.app
Ten.app
Il y a le couple de solutions de ici... Une avec
la boucle while a travaillé quand les noms sont extraites à partir du nom de fichier. Cependant, je suis en extrayant les fichiers requis après la pipe de redirection à partir de xcodebuild de commande. Est-il un moyen de trouver comme entrée dans la boucle while?
while
boucle et read
est vraiment remarquable.la boucle while a travaillé quand les noms sont extraites à partir du nom de fichier. Cependant, je suis en extrayant les fichiers requis après la pipe de redirection à partir de xcodebuild de commande. Est-il un moyen de trouver comme entrée dans la boucle while?
OriginalL'auteur Vebz | 2013-01-09
Vous devez vous connecter pour publier un commentaire.
Si vous n'avez pas besoin de stocker les noms de fichier dans une variable, vous pouvez utiliser
rechercher -print0
en combinaison avecxargs -0
. C'est ce qui sépare le trouve entrées par NUL octets au lieu de retours à la ligne.xargs
lit ces NUL de valeurs séparées et les appels de certains de commande avec autant d'arguments que possible.Si vous le souhaitez, vous pouvez limiter le nombre d'arguments donnés à
some-command
avecxargs -n 1
Pourtant, une autre approche est de lire les fichiers avec l'
while
boucleCe qui appelle certains de commande avec un fichier à la fois. Le point important est de joindre le
$f
en les guillemets doubles..//Ten EU.app .//Tenn Official App EU.app .//Ten Official App.app .//Ten.app
. Je vais essayer de les mettre dans un tableau tel que suggéré par ormaaj. Si cela échoue, je vais juste créer un fichier temporaire, placer les valeurs et le lire à partir de là, comme l'a suggéré zplesivcak. Il y a beaucoup plus de code et cette petite partie a prises pour toujours.Comment les mettre en tableau?
Un autre moyen serait d'utiliser la boucle while et ajouter les valeurs une par une. Voir également la question stackoverflow.com/q/1951506/1741542
OriginalL'auteur Olaf Dietsche
Les noms de fichier peuvent contenir des espaces. Vous devez vous demander trouver les séparer par
NULL(\0)
. Utilisationfind -print0
.Je suis désolé, je n'arrivais pas à interpréter votre réponse dans la commande complète. J'ai essayé de sortie=
find ./ -name "*.app" -print0
. Comment puis-je ajuster la valeur NULL(\0)Ce n'est pas une réponse complète. D'abord vous avez besoin de la non standard (mais commun)
-print0
fonctionnalité (c'est une bonne chose). Ensuite, vous avez besoin d'un moyen de lire les NUL délimité par des cours d'eau (plus Difficile. Généralement pas possible en l'absence d'une norme extras. Jetez un oeil à Bash deread -d
). Si vous avez besoin de stocker les résultats, vous aurez envie d'utiliser un tableau.Un exemple complet serait
for i in $(find -print0 | xargs -0 echo); do echo $i; done
votre méthode apporte le même résultat que le mien. (Même si j'ai ajouter des guillemets à "$i".
OriginalL'auteur alinsoar