1 votes

Pourquoi le fichier Bash script exécuté par raccourci ne peut-il pas obtenir le contenu d'un fichier ?

J'ai un script qui démarre une nouvelle activité pour hamster (traqueur d'activité). Voici mon script actuel :

ACTIVITY=`zenity --entry --title "Enter new activity name" --text "New activity name:"`
hamster start $ACTIVITY

Le problème est que je voudrais que le script se souvienne de la dernière tâche afin que je puisse simplement l'exécuter avec ENTER au lieu de taper le nom à nouveau. Je veux qu'il stocke le nom dans un fichier. Actuellement, j'ai créé le fichier manuellement : /usr/local/bin/hamster-log .

Mon script jusqu'à présent est le suivant :

file=/usr/local/bin/hamster-log
last=$(<$file)
activity=$(zenity --entry --title "Enter new activity name" --text "New activity name:" --entry-text "$last")
hamster start "$activity"
if [ ! -z "$activity" ]; then
    destdir=/some/directory/path/filename
    if [ -f "$file" ]; then
        echo "$activity" > "$file"
    fi
fi

Ce qui est bizarre, c'est que lorsque j'exécute le script depuis le terminal, il lit correctement le contenu du fichier, mais lorsque je l'exécute en utilisant un raccourci, il ne lit pas le fichier.

J'ai mis les permissions du fichier à 777 .

1voto

ieplugin Points 216

Je ne sais pas comment vous appelez le script dans le raccourci personnalisé mais il y a deux possibilités :

  • Vous appelez un interprète (par ex. sh /path/to/script ) : alors vous appelez sh ou une Shell incompatible : substitutions de commandes telles que $(<file) sont remplacés par le contenu de file seulement dans Bash ou les shells compatibles, donc vous pouvez appeler un Shell incompatible ;
  • Vous appelez le script (par ex. /path/to/script ) : alors le script n'a pas de shebang en haut.

Donc, soit :

  • Si c'est le premier, appelez le bon interprète ( bash /path/to/script ) ;
  • Dans le second cas, ajoutez un shebang en haut du script ( #!/bin/bash ).

Sinon, faites quelque chose de laid (mais POSIX et portable) comme :

last=$(cat "$file")

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X