Rediriger stderr vers stdout dans le C shell
Quand je lance la commande suivante dans csh
, je n'ai rien, mais il fonctionne dans bash
.
Est-il un équivalent dans csh
qui peut rediriger la sortie d'erreur standard à la standard?
somecommand 2>&1
- CSH est dangereux. Essayez de changer de bash,zsh faqs.org/faqs/unix-faq/shell/csh-whynot
- qu'entendez-vous par "dangereux"?
- Veuillez consulter le lien que j'ai citées dans le commentaire. Cela explique pourquoi.
- Je souhaite que je pourrais star votre lien entre les csh-whynot'
Vous devez vous connecter pour publier un commentaire.
La
csh
shell n'a jamais été réputé pour sa grande capacité à manipuler les descripteurs de fichiers dans le processus de redirection.Vous pouvez rediriger la fois la sortie standard et d'erreur dans un fichier avec:
mais ce n'est pas tout à fait ce que vous avez été au bout, la redirection erreur standard à la actuel sortie standard.
Toutefois, si votre système d'exploitation expose la sortie standard d'un processus dans le système de fichiers (comme Linux ne avec
/dev/stdout
), vous pouvez utiliser cette méthode comme suit:Cette force à la fois la sortie standard et erreur standard pour aller à la même place que le courant de sortie sur la sortie standard, ce que vous avez avec la
bash
redirection,2>&1
.Il suffit de garder à l'esprit que ce n'est pas un
csh
fonctionnalité. Si vous exécutez un système d'exploitation qui n'est pas exposer sortie standard dans un fichier, vous ne pouvez pas utiliser cette méthode.Cependant, il existe une autre méthode. Vous pouvez combiner les deux cours d'eau en un, si vous l'envoyez à un pipeline avec
|&
, puis tout ce que vous devez faire est de trouver un composant de pipeline qui écrit son entrée standard vers la sortie standard. Dans le cas où vous êtes pas au courant d'une telle chose, c'est exactement ce quecat
si vous ne lui donnez pas d'arguments. De là, vous pouvez atteindre vos buts dans ce spécifiques cas avec:Bien sûr, il y a aussi rien de vous empêche de courir
bash
(en supposant que c'est sur le système quelque part) dans uncsh
script pour vous donner des fonctionnalités supplémentaires. Vous pouvez ensuite utiliser la richesse des redirections de shell pour les cas plus complexes oùcsh
peut-être du mal.Nous allons explorer plus en détail. Tout d'abord, créez un fichier exécutable
echo_err
qui va écrire une chaîne destderr
:Puis un script de contrôle d'
test.csh
qui va le montrer en action:La
echo
de la PID etps
sont tout simplement de sorte que vous pouvez s'assurer qu'ilcsh
l'exécution de ce script. Lorsque vous exécutez ce script avec:(la première, la redirection est mis en place par
bash
avantcsh
commence l'exécution du script), et d'examiner lesout/err
fichiers, vous pouvez voir:Vous pouvez voir que le
test.csh
processus est cours d'exécution dans le C shell, et que l'appelbash
de l'intérieur, il vous donne le pleinbash
puissance de redirection.La
2>&1
dans lebash
commande très facilement vous permet de rediriger l'erreur standard à la actuel la sortie standard (comme souhaité), sans connaissance préalable de l'endroit où la sortie standard est actuellement en cours.tee
est le bon outil pour le travail. L'envoi de données par le biais d'tee
à la fois la sortie standard, et/dev/null
n'est pas différent de l'envoi de données par le biais d'cat
à tout sortie standard. J'ai donc mis à jour avec cette option, mais merci pour l'info, il a beaucoup aidé.cmd >& /dev/stderr
en fait totalement foiré mon NoMachine session, même si la commande a été sur un système distant à partir de cette session. J'ai eu upvoted cette réponse dans le passé, donc on peut supposer qu'il a travaillé dans le passé, mais je vous propose ce deuxième avis de se méfier.I objet de la réponse ci-dessus et fournir mon propre.
csh
N'ont cette capacité et voici comment on fait:ou
ou si vous voulez juste pour faire fusionner les flux (vers stdout) et de ne pas rediriger vers un fichier ou some_exec:
csh
, à l'exception de l'aide de la supercherie de temporairement l'appel d'unebash
shell.Comme paxdiablo dit que vous pouvez utiliser
>&
pour rediriger les deux stdout et stderr. Cependant, si vous voulez les séparer, vous pouvez utiliser les éléments suivants:...comme indiqué ci-dessus sera rediriger stdout vers stdoutfile et stderr de stderrfile.
Ce sujet juste
???
Ou de le faire pour tout voir sur l'écran et le faire aller à votre fichier:
Je pense que c'est la bonne réponse pour le csh.
Remarque la plupart des csh sont vraiment tcsh dans les environnements modernes:
rmockler>
ls -latr /usr/bin/csh
lrwxrwxrwx 1 root root 9 2011-05-03 13:40 /usr/bin/csh -> /bin/tcsh
à l'aide d'un backtick intégré déclaration de dépeindre comme suit:
si cela fonctionne pour vous s'il vous plaît bosse jusqu'à 1. Les autres suggestions ne fonctionnent pas pour mon csh environnement.