J'ai donc exécuté la commande find / .bash_profile
pour voir s'il existait n'importe où sur mon Mac avant d'en créer un. La recherche sur l’ensemble de l’ordinateur prend évidemment une minute, je voulais donc l’exécuter en arrière-plan (quelque chose que je n’ai jamais essayé de faire auparavant) et j’en ai ajouté un &
à la fin, comme suit:find / .bash_profile &
Cependant, au lieu de l'exécuter en arrière-plan et de me laisser faire d'autres tâches, cela a simplement rendu le processus ininterruptible! Il continuait à courir au premier plan mais Ctrl+ Cn'avait plus d'effet; il ne pouvait être arrêté qu'en fermant entièrement l'instance de terminal.
Qu'est-ce que j'oublie ici?
find
place de Spotlight?kill -l
). Vous pouvez également le ramener au premier plan avecfg
oufg %jobnumber
(voirjobs
), puis Control-C ou Control-Z.locate
, puis l'utiliserlocate .bash_profile
. Si vous essayez cette commande maintenant, elle vous dira comment l'activer de manière permanente.Réponses:
En effet, il fonctionne en arrière-plan et vous pouvez faire d'autres choses, mais chaque fois qu'il émet quelque chose, il émet vers votre terminal actuel.
Suggestion:
find / -name .bash_profile >my_result.txt 2>/dev/null &
Cela enregistre la sortie dans un fichier et supprime toutes les erreurs (telles que l'erreur d'autorisation refusée). Vous pouvez vérifier l'état en jetant un coup d'œil dans le fichier de sortie
tail my_result.txt
ou en le saisissantjobs
.Si vous devez supprimer le travail, tapez
kill %1
où 1 est le numéro du travailjobs
.la source
fg
control-c
). +1 pour mentionner également stderr.2>
? Je ne sais pas comment ça s'appelle, donc je ne sais pas comment le rechercher sur Google.2
est stderr, abréviation d'erreur standard.2>/dev/null
signifie que les erreurs sont redirigées vers/dev/null
0>
ferait bien .... réoriente apparemment stdin .... que je croyais à utiliser<
Êtes-vous sûr que le processus était au premier plan? Ce n’est pas parce qu’il écrit en sortie que le terminal est au premier plan.
Si vous avez une commande qui produit une sortie et que vous voulez l'exécuter en arrière-plan, vous devez rediriger la sortie comme suit:
Il est normal que le processus d'arrière-plan soit immunisé contre les interruptions ( Ctrl+ C). Vous pouvez donc interrompre votre travail de premier plan sans interférer avec le ou les travaux d'arrière-plan. (Notez, BTW, que vous avez mal compris la commande.)
la source
Vous avez trébuché sur une bête noire avec
find
. Essayez d'utiliser l'-print
option comme çaVous pouvez également être confronté à un problème en évitant d’échapper ou de ne citer que le point dans le nom du fichier.
find
prend en charge la syntaxe RegEx afin que point dans le nom du fichier puisse être mal interprété. L’un des exemples ci-dessous devrait résoudre ce problème.ou
Les guillemets simples sont plus souples car vous n’avez pas à échapper à chaque caractère de contrôle et vous pouvez plus facilement envelopper des caractères comme @ ou /
la source
.
) n'est pas un caractère spécial dans ce contexte.find … -name
ne traite pas son argument comme un RegEx à part entière (voir-regex
) et ne traite donc pas.
comme spécial. Même si elle a fait (par exemple, si nous avons parlé-regex
), citant la chaîne ou échapper le caractère ne serait pas question; vous auriez besoin d'échapper au caractère et de citer la chaîne. Et de quoi parles-tu@
et/
?-print
explicitement fait une différence? C'est l'action par défaut ("expression").