J'ai une fonction qui convertit le temps Epoch à ce jour. Voici la définition
date1(){
date -d @$1
}
J'aimerais pouvoir écrire:
$ date1 xxxyyy
Où xxxyyy est le paramètre que je passe dans ma fonction pour que je puisse obtenir la date correspondante. Je comprends que je dois l'ajouter dans l'un ou l'autre .bash_profile
, .profile
, ou .bashrc
puis source:
$ source file
Mais, je ne sais pas dans quel fichier le mettre. Actuellement, je l'ai dans .profile
. Mais pour l'exécuter, je dois faire source .profile
à chaque fois.
Idéalement, il devrait le rendre disponible, lorsque l'ordinateur démarre comme la variable d'environnement.
De man bash
:
Lorsque bash est invoqué en tant que shell de connexion interactif ou en tant que shell non interactif avec l'option --login, il lit et exécute d'abord les commandes du fichier/etc/profile, si ce fichier existe. Après avoir lu ce fichier, il recherche ~/.bash_profile, ~/.bash_login et ~/.profile, dans cet ordre, et lit et exécute les commandes à partir du premier qui existe et est lisible.
En d'autres termes, vous pouvez le mettre dans l'un des ~/.bash_profile
, ~/.bash_login
ou ~/.profile
, ou tout fichier source
d par l'un ou l'autre. Généralement ~/.profile
sera source ~/.bashrc
, qui est le "fichier d'initialisation personnel, exécuté pour les shells de connexion".
Pour l'activer, démarrez un nouveau shell, exécutez exec $Shell
ou exécutez source ~/.bashrc
.
Après avoir défini la fonction dans votre .profile
, ajouter export -f date1
. Cela exportera la fonction à utiliser par votre shell de connexion.
Les personnalisations pour les shells interactifs vont dans ~/.bashrc
. Les choses que vous souhaitez exécuter lorsque vous vous connectez vont dans ~/.profile
(ou ~/.bash_profile
, mais il n'est souvent pas chargé lors de la connexion graphique).
Mettez cette définition de fonction dans ~/.bashrc
.
Puisque bash ne se charge pas .bashrc
lorsqu'il s'agit d'un shell de connexion, forcez-le à le faire: écrivez un ~/.bash_profile
contenant
. ~/.profile
case $- in *i*) . ~/.bashrc;; esac
c'est-à-dire charger ~/.profile
, et également charger ~/.bashrc
si le shell est interactif.
Voir Alternative à .bashrc et les articles qui y sont liés.
csh et tcsh ne prennent pas en charge les fonctions comme bash mais vous pouvez le faire.
Par exemple, voici une fonction simple pour imprimer du texte
alias print_hello_world 'eval echo "hello world"'
passer des arguments au script
repeate_after_me 'eval echo "$1"'
faire du code sur plusieurs lignes comme une instruction if est un peu compliqué mais c'est parti.
alias X 'eval "if (\!:1 =~ 'yes') then \\
echo yes \\
else \\
echo no \\
endif"'
vous devrez toujours évaluer mais la partie la plus complexe est de faire le \!:[x]
syntaxe pour obtenir l'entrée de la ligne de commande.
Cela devrait suffire à vous faire trier.
Vous pouvez rediriger toutes les fonctions actuelles vers bashrc avec typeset.
Par exemple, voici comment j'ajoute une fonction d'une commande openstack avec un paramètre facultatif, dans bashrc:
urc() { . stackrc; set -x; openstack server list --all $1; set +x; }
typeset -f >> ~/.bashrc
Maintenant, il est enregistré pour les sessions futures et peut être utilisé comme:
$ urc
ou
$ urc --debug