7
votes

Puis-je exécuter des commandes imbriquées ou chaînées dans UNIX Shell?

Puis-je exécuter la commande dans une autre commande dans les coquilles UNIX?

Si impossible, puis-je utiliser la sortie de la commande précédente comme entrée de la commande suivante, comme dans:

commande x puis commande y ,

où dans commande y je veux utiliser la sortie de la commande x ?


4 commentaires

@MOHAMMAMMAD: J'ai supprimé la balise SVN puisque cela n'a rien à voir avec SVN, c'est une question de tuyauterie de commandement général.


Je pense que vous devez décrire le plus grand problème que vous rencontrez. Qu'est-ce que exactement essayez-vous d'accomplir?


1. Je veux trouver tout le référentiel .... 2. Je veux trouver tout le répertoire pour tous ... Remarque: Remarque: Résultat de l'exécution d'une étape de plus de 500 repositoy, donc j'ai besoin de méthode pour exécuter l'étape deux par méthode facile , ,


J'exécute la commande suivante: -Find / -Type F -Name FS-type -exec svnlook arbre {} \; | Egrep "/ $" ... Le résultat est SVNLook: impossible d'ouvrir le fichier '/ var / lib / svn / repos / b1me / produits / payone / générique / code / noyau / d b / fs-type / format ': Pas un répertoire svnlook: impossible d'ouvrir le fichier' / var / lib / svn / repos / b1me / produits / payone / générique / code / frais / d b / fs-type / format ': pas un répertoire .. ... Peut-être que nous devons faire la commande de la commande, donnez-nous un chemin sans "db / fs-type / format" mais comment je peux faire cela ???


4 Réponses :


20
votes

Vous pouvez utiliser les backuotes pour cela.

Par exemple, cela va chat le fichier.txt

chat et tombe; écho fichier.txt & grave;

Et cela imprimera la date

écho la date est & grave; date et tombe;

Le code entre les devis arrière sera exécuté et être remplacé par son résultat.


5 commentaires

S'il vous plaît, vous pouvez me donner l'exemple plus en détail


Mais s'il vous plaît, dans le cas suivant, quelle est la solution: j'exécute "TROUVERTYPE F -NAME FS-TYPINT" Cette commande a trouvé tout le référentiel ... maintenant je dois trouver tous les répertoires du référentiel de cette commande "Svnlook Tree /var/lib/Lib.org.15-01-2008/svn/repos/psest | Egrep "/ $


Ensuite, vous devez regarder l'option -exec de trouver


Est-il possible de nier des backuotes? J'essaie d'utiliser le résultat de cette expression dans une commande: realpath --Relative-to = pwd git top pwd (où git haut est un alias qui exécute à Le sommet du référentiel. L'idée est de mettre cela dans une commande de recherche, qui me donnera des chemins relatifs aux résultats, pour une utilisation dans une liaison SelectA Fuzzy Selection Vim.


Googlefoo a évidemment échoué: Ici, c'est LinuxMisc.com/12-unix-shell/12-unix-shell/12 d9c594a376ffed37.htm - $ foo = `echo \ \` \ `écho hello \` `- c'est-à-dire échapper aux internes



11
votes

Vous pouvez faire quelque chose comme; xxx

ici dirname "$ chemin" sera exécuté en premier et son résultat sera substitué, puis le grep fonctionnera, à la recherche de Le résultat de dirname dans le fichier


3 commentaires

Mais s'il vous plaît, dans le cas suivant, quelle est la solution: j'exécute "TROUVERTYPE F -NAME FS-TYPINT" Cette commande a trouvé tout le référentiel ... maintenant je dois trouver tous les répertoires du référentiel de cette commande "Svnlook Tree /var/lib/lib.org.15-01-2008/svn/repos/psest | Egrep "/ $ ..... Comment puis-je le résoudre


@MoHammed: ajoutez-le à votre question principale.


Je veux trouver tout mon référentiel, puis trouver tout son contenu



4
votes

Qu'est-ce que vous essayez exactement de faire? Il n'est pas clair des commandes que vous exécutez. Peut-être que si vous décrivez ce que vous recherchez, nous pouvons vous indiquer dans la bonne direction. Si vous souhaitez exécuter une commande sur une gamme de noms de fichier (ou de répertoire) renvoyés par la commande "Rechercher", Colin est correct, vous devez consulter l'option "-exec" de "trouver". Si vous souhaitez exécuter une commande sur un groupe d'arguments énumérés dans un fichier ou en provenance de STDIN, vous devez consulter les commandes «Xargs». Si vous souhaitez mettre la sortie d'une seule commande sur la ligne de commande d'une autre commande, alors à l'aide de "$ (commande)" (ou "commande" [remplacez le 'avec un backquote]) fera le travail. Il y a beaucoup de façons de faire cela, mais sans savoir ce que vous essayez, il est difficile d'être plus utile.


0 commentaires

-1
votes

Voici un exemple où j'ai utilisé des commandes système imbriquées. J'avais dirigé "LS -LTR" au-dessus de la commande de recherche. Et il exécute en série sur la sortie de la recherche.

LS -LTR $ (Trouvez. -Name "srvm.jar")


1 commentaires

Êtes-vous au courant du -Ls à la fin d'un trouver ? Comme ici: trouver. -Name "srvm.jar" -ls .