Scénario simple: je recherche un wsdl
fichier perdu au milieu d'un projet.
$ find -name '*.wsdl'
./some/very/very/long/way/to/some/lost/directory/filename.wsdl
Maintenant que je sais où il se trouve, je veux faire quelque chose avec ce fichier, disons le modifier. Au lieu de copier / coller le chemin derrière ma commande, est-il possible d'utiliser le chemin renvoyé par find
plus tôt? Tout comme il est possible d'accéder au dernier argument que vous avez tapé !$
ou à votre dernière commande !!
.
J'ai lu que c'était possible avec $?
, mais cela ne me renvoie qu'une erreur:0: command not found
$ echo $?
0: command not found
Réponses:
Exécutez la commande dans la substitution de commande:
La sortie est maintenant stockée dans la
output
variable que vous pouvez utiliser autant de fois que vous le souhaitez.la source
$?
ne contient pas les chemins.return
dans la question. Votre réponse est absolument correcte pour la question ci-dessus.$?
contient le statut de sortie de la dernière commandeIl n'y a pas de variable bash spéciale pour cela.
$?
contient le code de sortie de la dernière commande (0 = succès,> 0 = code d'erreur)Vous pouvez utiliser la sortie de
find
avec le-exec
drapeau, comme ceci:Le
{}
est remplacé par le nom du fichier trouvé parfind
. Cela exécuterait la commande pour chaque fichier trouvé. Si vous voulez exécuter une commande avec tous les fichiers trouvés en tant qu'arguments, utilisez une+
fin comme ceci:Cela ouvrirait une instance emacs avec tous les fichiers .wsdl trouvés ouverts.
Une solution plus générale consiste à stocker le résultat dans une variable:
Cela fonctionne avec toutes les commandes, pas seulement trouver. Bien que vous puissiez aussi utiliser
xargs
:la source
$?
de retourner le code de sortie d'une autre commande? par exemple, ping 1.1.1.1 -w 10; retour $?$?
contient le code de sortie de la commande précédente, quelle qu’elle soit. Donc, la réponse est oui.Voici un petit hack qui devrait faire ce que vous voulez avec un minimum de frappe, si cela ne vous dérange pas que la dernière commande soit exécutée deux fois.
Utilisez backtick, ala:
`!!`
par exemple
* edit: Je vois la question ci-dessus liée "éventuellement dupé" contient également cette réponse. toujours pertinent directement à celui-ci, donc le laisser, mais désolé pour la dupe.
la source
git br | grep
dans mon cas)!!
est beaucoup plus facile que d'appuyer sur la touche haut? Et alors vous pouvez toujours voir votre commande. Si exécuter à nouveau la commande est acceptable, je pense que simplement appuyer est aussi facile (et un peu plus compréhensible et transparent),