La réponse acceptée est très utile ! Je voudrais juste ajouter que la substitution de processus (c'est-à-dire, <(COMMAND)
) n'est pas pris en charge dans certains shells (par exemple, dash
).
Dans mon cas, j'essayais de créer une action personnalisée (essentiellement un shell d'une ligne script) dans le gestionnaire de fichiers Thunar pour démarrer un shell et activer l'environnement virtuel Python sélectionné. Ma première tentative a été la suivante :
urxvt -e bash --rcfile <(echo ". $HOME/.bashrc; . %f/bin/activate;")
donde %f
est le chemin d'accès à l'environnement virtuel géré par Thunar. J'ai obtenu une erreur (en lançant Thunar à partir de la ligne de commande) :
/bin/sh: 1: Syntax error: "(" unexpected
J'ai alors réalisé que mon sh
(essentiellement dash
) ne prend pas en charge la substitution de processus.
Ma solution a été d'invoquer bash
au niveau supérieur pour interpréter la substitution de processus, au prix d'un niveau supplémentaire de shell :
bash -c 'urxvt -e bash --rcfile <(echo "source $HOME/.bashrc; source %f/bin/activate;")'
Par ailleurs, j'ai essayé d'utiliser here-document pour dash
mais sans succès. Quelque chose comme :
echo -e " <<EOF\n. $HOME/.bashrc; . %f/bin/activate;\nEOF\n" | xargs -0 urxvt -e bash --rcfile
P.S. : Je n'ai pas assez de réputation pour poster des commentaires, les modérateurs sont libres de les déplacer dans les commentaires ou de les supprimer s'ils ne sont pas utiles pour cette question.