web-dev-qa-db-fra.com

Résultat de calcul paresseux des fonctions bash dans un alias

Je veux ouvrir une nouvelle fenêtre de terminal à l'emplacement actuel par simple commande dans Ubuntu

gnome-terminal --working-directory=`pwd` & disown

Le travail est agréable pour moi. Mais quand je mets alias à bashrc

alias clone="gnome-terminal --working-directory=`pwd` & disown "

pwd Calculé au début. Donc, je reçois quelque chose comme.

$ type clone
 clone is aliased to `gnome-terminal --working-directory=/home/user & disown '

Est-il possible que pwd ne calcule que lorsque j'appelle un alias. Ou j'ai besoin d'écrire la fonction bash sauf alias?

5
Stepan Loginov

Utilisez simplement des guillemets simples autour de la commande de déclaration alias pour que la substitution de commande (pwd) ne se produise pas lors de la déclaration (et ne se développera que lorsque l'alias sera appelé):

alias clone='gnome-terminal --working-directory=`pwd` & disown'

Commencez également à utiliser la syntaxe de substitution de commande $() à la place d'ancien et problématique ``:

alias clone='gnome-terminal --working-directory="$(pwd)" & disown'

Notez également que gnome-terminal est conçu de manière à ce que chaque fois que vous le faites.

gnome-terminal

cela ouvrirait une nouvelle fenêtre avec le même PID que celui d'origine. C’est parce que c’est le même processus par conception, la sortie de l’un ne tuera pas l’autre (s). Donc, vous n'avez pas besoin de disown et d'arrière-plan (&), mais simplement:

alias clone='gnome-terminal --working-directory="$(pwd)"'

ferait.

De plus, comme l'a souligné @ Digital Trauma, gnome-terminal commence toujours par le répertoire de travail en cours, donc --working-directory n'est pas nécessaire, car vous le définissez comme pwd. Donc vous pouvez juste faire:

alias clone='gnome-terminal' 
10
heemayl