2009-09-01 7 views
2

Existe-t-il un moyen de faire une substitution de commande dans le shell BASH sans casser la sortie en plusieurs arguments?substitution de commande mais sans rupture de sortie en plusieurs arguments

Je copie le chemin de certains répertoires (de la barre d'adresse dans un navigateur de fichiers GUI) vers le presse-papier puis exécute la commande suivante, où la commande xsel renvoie le contenu du presse-papiers, qui est le chemin du répertoire :

cd `xsel` 

Mais certains chemins contiennent des espaces ou peuvent même contenir des caractères spéciaux utilisés par BASH.

Comment puis-je transmettre la sortie d'une commande en tant qu'argument simple et sans BASH avec des caractères spéciaux?

Répondre

5
cd "$(xsel)" 

semble gérer tous les caractères spéciaux (y compris $ et espaces).

Ma chaîne de test était boo*;cd.*($\: $_

$ mkdir "$(xsel)" 
$ ls 
boo*;cd.*($\: $_ 

$ file boo\*\;cd.\*\(\$\\\:\ \$_/ 
boo*;cd.*($\: $_/: directory 

$ cd "$(xsel)" 
$ pwd 
/tmp/boo*;cd.*($\: $_ 
2

Avez-vous essayé:

cd "`xsel`" 

Cela devrait faire le travail, sauf si vous avez de dollars ($) ou back-slash (\) dans votre chemin.

+0

Je ne pense pas qu'il importe si vous avez des méta-caractères dans la chaîne une fois que vous avez enveloppé la 'xsel' guillemets doubles –

+0

Bash interprétera une très petit nombre de méta-caractères entre guillemets. Seules les guillemets simples arrêtent toute interprétation. – dave

0

Si vous ne le faites pas par programme, la plupart des terminaux sous Linux vous permettent de coller à partir du presse-papiers avec un clic du milieu de votre souris. Bien sûr, vous devrez toujours mettre des guillemets avant et après votre collage, comme le suggère @dave.

+0

Si le répertoire est /oeuf/spam/lard chunky/ma musique et si je tape cd et coller le chemin, il est cd/oeuf/spam/lard chunky/ma musique , qui sera cd dans/oeuf/spam/chunky. – Yoo

Questions connexes