J'ai un script bash avec quelque chose comme
while read -r name value
do
....something
done < "test"
J'exécute ce script en tant qu'utilisateur normal.
Maintenant, je voulais stocker ce fichier dans le répertoire personnel /root
et le lire à partir de là.
Faire
while read -r name value
do
....something
done < "/root/path/to/file"
bien sûr, j'ai l'erreur: ./script: ine xy: /root/path/to/file: Permission Denied
Que j'ai essayé
while Sudo read -r name value
do
....something
done < "/root/path/to/file"
Mais cela me donne: Sudo: read: unknown command
Pourquoi ne puis-je pas lire un fichier dans le répertoire de départ /root
alors que j'utilise Sudo
?
EDIT
J'ai essayé un peu plus loin et j'ai découvert que je ne pouvais même pas faire
$> Sudo echo "test" /root/.test
[Sudo] Password for user:
-bash: /root/.test: Permission Denied
EDIT 2
Cela fonctionne comme je veux si je lance le script complet avec Sudo ./myscript
mais je préfère ne pas le faire ... Y a-t-il un autre moyen?
Votre approche ne fonctionne pas parce que vous lisez le fichier avec <
"stdin", cela signifie que votre shell est chargé de la lecture du fichier et que vous l'avez exécuté avec un utilisateur régulier droit de lire le fichier. Sachez maintenant que l'exécution de la commande read
à l'aide de Sudo
ne vous aidera pas à ne pas mentionner que c'est un shell intégré qui ne peut pas être exécuté à l'aide de Sudo
, comme cd
etc.
La seule chose que vous devriez faire est en quelque sorte de lire le fichier vi root
ou un utilisateur/groupe avec les privilèges nécessaires. Donc, vous pouvez le faire comme:
Sudo cat /root/txt | while read -r name value;
do
some command
done
dans ce cas, seul cat
sera exécuté avec Sudo
.
Cependant, la meilleure pratique consiste à mettre votre script dans /usr/local/bin
afin que tout le monde ait accès à son exécution.
Notez également que lorsque vous souhaitez rediriger quelque chose vers /root/example
, vous devez utiliser Sudo tee
:
echo test | Sudo tee file
ou exécutez le script entier à l'aide de Sudo
.
Le dossier/root est réservé à la racine. Je crois que seul le système peut manipuler des fichiers à cet endroit. vous pouvez essayer avec 'su' mais je pense que vous obtiendrez le même résultat.
deuxièmement: il n'est pas recommandé d'exécuter des programmes normaux avec des privilèges root.
lorsque vous utilisez Sudo dans la ligne de commande, vous fournissez le mot de passe et devenez root. le script ne peut pas faire cela. c'est une mesure de sécurité pour s'assurer que quelqu'un au terminal effectue les modifications. De plus, certaines actions et certains dossiers ne sont disponibles que pour le processus système racine.