comment écrire foreach en ligne csh?
Parfois je utiliser le même foreach opération avec les différents fichiers cibles dans les csh.
Si je peux donner foreach commande sur une seule ligne, je pourrais facilement substituer la cible des noms de fichier de répéter le processus.(J'ai l'habitude d'utiliser `trouver . -nom de ... " pour les fichiers cibles)
Pour les fins de cette question, supposons que je veux chat tous les *.les fichiers txt.
$ foreach i (*.txt)
foreach? cat $i
foreach? end
J'ai lu https://unix.stackexchange.com/questions/32873/running-a-full-foreach-command et essayé
alias disp 'echo "foreach i (*.txt)"; echo "cat "$"i"; echo "end"; | /bin/csh'
quand je tape disp
il me donne Invalid null command
.
Si je peux le faire en une seule ligne, j'ai pu faire !foreach:gs/\.c\>/.h/
(faire la même chose en remplacement .c avec .h).
Comment puis-je le faire?
Vous devez vous connecter pour publier un commentaire.
Cette méthode fonctionne pour moi:
printf 'foreach f ( 1 2 3 )\n echo $f \n end \n' | tcsh
Il n'est pas facile de faire le foreach dans une ligne sous tcsh.
Cependant, en utilisant des alias, vous pouvez obtenir quelque chose de très proche à votre question.
Vous pouvez appeler
disp
dans votre terminal.Si vous voulez rediriger le résultat dans un tuyau, puis
echo `disp` | grep foobar
.Parfois, nous avons besoin d'enregistrer le résultat en premier, avant la poursuite du traitement:
set foo=`disp`
J'ai essayé de trouver la réponse, mais il semble il n'existe aucun moyen. Suffit d'utiliser bash en changeant simplement la coquille.
% bash
$ for f in *txt; do echo $f; fait
$ exit
%
Utiliser bash -c:
$ bash -c 'for i in *.txt; ne cat $i; done'
Pour votre première question, je ne sais pas comment l'écrire .cshrc fichier directement.
Mais je vais utiliser un autre moyen flexible pour ce faire.
1: Écrire un script shell:
/home/user/disp.sh (ou n'importe quel chemin vous voulez)
Ou seul le shell csh:
Ajouter un nouvel alias de commande pour la
.cshrc
fichieralias disp /home/user/disp.sh
Entrer de nouveau shell csh (ou reconnectez-vous)
csh
Pour votre deuxième question, je l'ai fait sur le même disp.sh script
Cet exemple est écrit en bash shell script.
Vous suffit de taper
disp -d 1 -e c
de trouver toutes les .c fichier dans le chemin d'accès actuel.(-d signifie que la profondeur de la file qui est démarré à partir du chemin d'accès actuel, -e signifie l'extension des fichiers)
for i in 1 2 3; do echo $i; done
.