Vous pouvez utiliser --passphrase-fd 0
dire à gpg de lire le mot de passe de stdin. Cela devrait bien s'entendre avec les pipes. Ne l'envoie pas deux fois. cela n'est nécessaire que pour la détection des fautes de frappe lorsque vous le faites de manière interactive.
Normalement, gpg lit à partir du terminal afin que vous puissiez rediriger les entrées et les sorties tout en ayant la possibilité de saisir une phrase secrète.
Dans une session de connexion normale, votre shell est connecté au terminal par 3 descripteurs de fichier: stdin, stdout et stderr. Les canaux et les opérateurs de redirection changent là où ces descripteurs de fichier pointent.
Si vous exécutez une commande sans opérateur de redirection, tous les descripteurs de fichier sont hérités du shell. Quand il lit à partir de stdin, il lit à partir du tty.
Si vous exécutez la même commande avec un <
opérateur de redirection, son stdin est connecté au fichier dont le nom apparaît après le <
. Si vous mettez une commande sur le côté droit d'un |
opérateur, son stdin est connecté à un descripteur de fichier pipe (dont l'extrémité opposée est connectée à la sortie standard de la commande située à gauche de la commande). |
.)
C'est ce que vous saviez probablement déjà. Ce que vous ne saviez pas, c’est qu’outre les descripteurs de fichiers, il existe une autre chose qui relie les terminaux aux processus terminal de contrôle . Votre processus shell a un terminal de contrôle et il est hérité par tous les processus enfants, y compris dans ce cas votre gpg
.
Lorsqu'un programme souhaite obtenir une saisie au clavier de l'utilisateur alors que stdin n'est pas un terminal, il peut accéder à son terminal de contrôle en ouvrant le fichier spécial. /dev/tty
.
Un type de programme qui dépend fortement de cette fonctionnalité est un pager (par exemple. more
, less
). Si tu cours somecommand | less
, quoi less
veut lire une entrée du tuyau sur stdin, afficher le premier écran, puis lire sur le clavier pour attendre que vous appuyiez sur une touche pour lui indiquer quoi faire. stdin ne peut pas être à la fois le tuyau et le clavier, donc less
ouvre /dev/tty
.
Le terminal de contrôle d’un processus est répertorié dans le TTY
colonne par ps
.
echo enter|gpg --passphrase-fd 0 -c myFile.txt
. Cela me dit ensuite, juste pour mémoire:Reading passphrase from file descriptor 0
. Donc, vous avez résolu mon problème (merci beaucoup), mais je suis toujours curieux de savoir de quelle entrée il lit si ce n’est l’entrée standard (et pourquoi).