Echo: Commandes multiples

0

Hoi tout le monde,

Je suis actuellement confronté à la nécessité d'exécuter plusieurs commandes dans un écho. La ligne suivante est un exemple du problème que j'ai:

echo (cd .. && pwd)

L'idée est que, lorsque je suis actuellement dans le dossier "home / Documents", le code ci-dessus imprime "home" - tout en restant dans le répertoire "home / Documents". Cependant, la commande ci-dessus échoue.

La question plus générale est: comment puis-je exécuter plusieurs commandes dans un écho et imprimer le dernier résultat (ou tous les résultats s'il n'est pas possible autrement).

Merci, amicalement.

bublitz
la source
3
Quoi que vous essayiez de faire ici, je suis presque sûr echo n'est pas le bon outil. je me rappelle votre question précédente , vous semblez abuser echo. S'il te plait regarde Problème XY . Qu'est-ce que vous essayez vraiment de faire avec cet engin?
Kamil Maciorowski
L'autre fil est le problème réel - donc d'abord sudo su, puis lftp puis plusieurs commandes d'écho - mais je pense que le vrai problème réside dans l'écho - c'est pourquoi j'ai posé cette question dans l'espoir qu'elle répond également à l'autre.
bublitz
1
Tout d'abord, cette syntaxe est fausse. Ni bash, ni zsh ne peuvent analyser cela. Comment l'avez-vous fait courir? echo (cd .. && pwd) bash: syntax error near unexpected token cd'
Fanatique
Vous êtes trop accroché à mon exemple - je l'ai posté pour clarifier le problème que j'ai. La prochaine fois, essayez de résoudre le problème à votre façon plutôt que de critiquer cet exemple. Ci-dessous la solution que j'ai trouvée :-)
bublitz
2
"au lieu de critiquer l'exemple" - Les gens ne comprennent pas votre code (ici et dans l'autre question). Vous pouvez croire que votre code est explicite, mais ce n'est pas le cas. Désolé, c'est tellement faux et poilu que ça déclenche les moments WTF Pas de honte, nous avons tous commencé à ne rien savoir. À mon avis, vous devez apprendre les outils que vous utilisez et les comprendre. Nous pouvons vous aider avec ceci. Demander "quel est le problème avec echo `pwd`? "est un bon début.
Kamil Maciorowski

Réponses:

2

L'idée est que, quand je suis actuellement dans le dossier home/Documents, le code ci-dessus s'imprime home - mais est toujours dans le répertoire home/Documents

Vous n'avez pas besoin echo du tout parce que pwd imprime ce que tu veux. Utilisez ceci:

(cd .. && pwd)

Il y a deux choses intelligentes ici:

  • (whatever) court whatever dans un sous-shell. Si cd se trouve entre ces parenthèses, cela changera le répertoire de travail actuel du sous-shell, pas le shell principal (votre actuel).
  • a && b court b si si a réussi (état de sortie renvoyé 0 ). En général, si vous voulez que votre script utilise cd pour être robuste, il est bon de toujours vérifier si cd réussi. Cela empêche d’exécuter d’autres commandes dans un mauvais répertoire.

Notez que lorsque des liens symboliques sont impliqués, vous ne pouvez pas obtenir le chemin que vous attendez. Voir cette réponse du wiki de la communauté pour plus de détails.

Kamil Maciorowski
la source
-1

J'ai trouvé la solution:

(cd .. && echo `pwd`)

Je vous remercie :)

bublitz
la source
4
Pourquoi utilisez-vous encore l'écho? Il suffit de faire ( cd .. && pwd )
Attie
2
En relation: Programmation Cargo Cult .
Kamil Maciorowski
Oui, tu en as besoin. Le problème était que la commande doit être exécutée sur un serveur et c'est pourquoi j'ai besoin d'imprimer l'écho (pour que le serveur voie la commande "pwd" et non le dossier actuel - ce qui serait une commande invalide)
bublitz