Je suis dans: GNU _ bash, version 4.4.12 (1) -release (x86_64-pc-linux-gnu)
le script est: (note.sh)
#! /bin/bash
edit="edit"
if [[ $edit = $1 ]]
then
touch ~/.notes/"$2".txt
$EDITOR ~/.notes/"$2".txt
else
tree ~/.notes
fi
J'espérais que si je saisis dans bash: ./note.sh
je reçois une sortie comme si j'avais tapé tree ~/.notes
Mais je veux que ce script accepte les arguments, donc si je saisis ./note.sh edit new_note
, puis si new_note. txt n’existe pas, touch ~/.notes/new_note.txt
alors (Gedit pour moi) éditeur de texte ouvrant new_note.txt dans un terminal pour édition
l'instruction else fonctionne, mais ./note.sh edit new_note
renvoie
./note.sh: line 10: /home/username/.notes/testnote.txt: Permission denied
C'est le toucher mais pas l'éditeur. Qu'est-ce qui se voit refuser l'autorisation ici?
Merci d'avance! Je suis très nouveau dans les scripts Shell et askubuntu et j'apprécie beaucoup votre aide.
En bash, la variable $EDITOR
n'est pas définie par défaut. Cependant, il existe une commande qui appelle l'éditeur par défaut.
Pour cette commande c'est:
editor <filename>
Pour définir la commande à votre choix:
Sudo update-alternatives --config editor
Exemple:
terrance@terrance-ubuntu:~$ Sudo update-alternatives --config editor
There are 3 choices for the alternative editor (providing /usr/bin/editor).
Selection Path Priority Status
------------------------------------------------------------
0 /bin/nano 40 auto mode
1 /bin/ed -100 manual mode
2 /bin/nano 40 manual mode
* 3 /usr/bin/vim.tiny 10 manual mode
Press <enter> to keep the current choice[*], or type selection number:
Après avoir choisi votre éditeur par défaut, tout ce que vous avez à faire pour l'appeler dans votre script est:
editor ~/.notes/"$2".txt
J'espère que cela t'aides!
La variable $EDITOR
n'est pas définie, elle est donc vide lorsque vous atteignez cette ligne. Quitter ~/.notes/"$2".txt
pour bash
appeler.
Donc bash
essaie ensuite d'exécuter /home/username/.notes/testnote.txt
qui donne permission refusée car aucun indicateur d'exécutable n'a été défini pour le fichier.
Comme Terrance déjà mentionné, appelez directement la commande editor
ou affectez un éditeur de texte valide à la variable $EDITOR
.
EDITOR="/usr/bin/vi"
ou
EDITOR="/usr/bin/vim"
ou
EDITOR="/bin/nano"
ou tout autre éditeur de votre choix.
En bref: Sur Debian/Ubuntu: exécutez sensible-editor
.
Mais à propos de l'erreur que vous voyez:
Comme d'autres l'ont déjà mentionné, si EDITOR
est vide ou non défini, le développement non cité de $EDITOR
ne donne rien. Par conséquent, ce que le shell considère comme le premier mot de la ligne et le nom de fichier de la commande cela vient après.
Une extension citée "$EDITOR"
donnerait un mot vide, ce qui vous donnerait une erreur déroutante lorsque le shell tente d'exécuter une chaîne vide une commande:
bash: : command not found
Vous souhaiterez probablement définir un repli dans le cas où EDITOR
n'est pas défini. Vous pouvez utiliser l'extension ${par:-Word}
pour cela. Par exemple. "${EDITOR:-vi}"
utiliserait la valeur de EDITOR
et si elle est vide ou non définie, revenez à vi
.
Ensuite, il y a aussi VISUAL
, qui remplit à peu près la même fonction, vous pouvez donc vérifier les deux: "${VISUAL:-${EDITOR:-vi}}"
.
Sur Ubuntu et les autres systèmes basés sur Debian, vous devez utiliser sensible-editor
(au lieu de editor
, vi
ou nano
) car autorise un paramètre par utilisateur de l'éditeur par défaut, contrairement à editor
qui dépend du lien symbolique défini par update-alternatives
.
sensible-editor
vérifie également VISUAL
et EDITOR
, vous n'avez donc pas besoin de les vérifier explicitement, mais vous pouvez simplement exécuter sensible-editor $file
et le résultat sera correct.
(Même si votre système est composé d'un seul utilisateur, il est bon de garder à l'esprit qu'il existe des systèmes multi-utilisateurs et que vous pouvez avoir plusieurs utilisateurs même sur un ordinateur de bureau.)