Il s'agit probablement d'un doublon, mais toutes mes recherches soulèvent des questions sur les erreurs d'autorisation refusée.
J'exécute une commande dans un shell bash. Je veux rediriger la sortie pour l'ajouter à un fichier qui n'existe probablement pas lors de la première exécution. Je souhaite définir un mode d'autorisation de fichier spécifique si la redirection de sortie doit créer ce fichier. Existe-t-il un moyen de le faire avec une seule commande?
Par exemple, je pourrais essayer
foo >> /tmp/foo.log 0644
où 0644
sont les autorisations avec lesquelles je veux me foo.log
retrouver. La plupart des commandes que j'ai expérimentées dans bash finissent par être interprétées 0644
comme un argument supplémentaire foo
.
J'ai l'impression que cela va prendre une deuxième commande pour chmod
les autorisations avant ou après y avoir écrit.
J'utilise GNU bash 4.2.25 et Ubuntu 12.04, si cela fait une différence - les réponses générales sont préférées.
la source
umask
réponses sont meilleures et l'une d'elles doit être acceptée.Je sais que c'est une vieille question, mais je voulais ajouter mes deux cents.
J'ai eu la même idée et j'ai trouvé une solution similaire à BowlesCR . Le problème avec sa solution était que ma commande (
foo
) ne fonctionnerait pas si je modifiais l'umask avant de l'exécuter, c'est donc mon point de vue sur le problème:Ici,
umask
affecte uniquement la redirection versfoo.log
dans le sous-shell. Tout le reste reste inchangé.Un peu alambiqué, mais ça marche.
la source
Sans vrai script, vous pouvez enchaîner un peu:
Effectivement similaire à la réponse de Slowki , mais condensé en un seul revêtement.
La seule autre chose à laquelle je peux penser est de bricoler le umask. Il est préférable de le faire en sous-couche afin qu'il ne pollue pas l'environnement actuel:
Deux problèmes avec cela, cependant.
creat()
syscall (0666 semble être ce que Bash utilise).umask
s'applique uniquement à la création de fichier ).la source
cat
. (Bien que cela ne suive pas le modèle standard des utilisations inutiles decat
.) (2) Je suppose que vous vouliez dire que bash utilise par défaut le mode 0666 lors de la création de fichiers, et j'ai donc modifié votre réponse pour le dire. (Voir ça , ça ... (suite)umask
valeur de 22, 23 ou 32 fonctionnerait aussi, dans ce contexte (vous n'avez pas besoin d'utiliser un ou des zéro (s) en tête; quand les modes et lesumask
valeurs sont spécifiés numériquement, ils sont toujours interprétés comme octaux).22
est plus communément utilisé de façon conventionnelle.Lorsque la redirection définit les mauvaises autorisations, par exemple:
Je crois que vous pouvez utiliser quelque chose comme xynomorf a donné, et répondre à la préoccupation stderr d'Orsiris de Jong avec une légère modification pour utiliser la substitution de processus bash .
Naturellement, utilisez
umask 0077
pour obtenir le mode600
et interdire à tout autre utilisateur de voir le contenu.la source
Si vous souhaitez rediriger vers un script, contrairement
umask
à la substitution de processus etinstall
vous pouvez également définir le bit d'exécution:<()
place la sortie dans un fichier temporaire, voir Process-Substitutionla source