umask passe à 0002 après cd

J'ai remarqué un comportement étrange sur mon système Ubuntu 12.04 LTS. C'est ma première expérience avec Ubuntu; précédemment, j'ai utilisé Fedora et n'ai jamais eu ce problème.

J'ai mis mon umask dans .bashrc à 0027. Mais il change automatiquement en 0002 à chaque fois que je cd dans un autre directory. Peu importe dans quel directory je vais; chaque changement de directory entraîne le changement de masque.

bbrown@cs:~$ umask 0027 bbrown@cs:~$ cd / bbrown@cs:/$ umask 0002 bbrown@cs:/$ umask 027 bbrown@cs:/$ cd /var/log bbrown@cs:/var/log$ umask 0002 

Cela arrive même si j'utilise simplement cd sans directory:

 bbrown@cs:/var/log$ cd bbrown@cs:~$ umask 027 bbrown@cs:~$ umask 0027 bbrown@cs:~$ cd bbrown@cs:~$ umask 0002 

J'ai cherché à travers d'autres forums de discussion. Une question similaire a été posée sur Stack Overflow sans résolution.

Je n'ai pas de lists de contrôle d'access spécifiques sur l'un de ces directorys.

 bbrown@cs:/var/log$ getfacl / getfacl: Removing leading '/' from absolute path names # file: . # owner: root # group: root user::rwx group::rx other::rx bbrown@cs:/var/log$ getfacl /var/log getfacl: Removing leading '/' from absolute path names # file: usr/bin # owner: root # group: root user::rwx group::rx other::rx 

Les filesystems sont ext4 sans options de assembly ACL:

 bbrown@cs:/var/log$ more /etc/fstab # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc nodev,noexec,nosuid 0 0 /dev/mapper/vg0-root / ext4 errors=remount-ro 0 1 # /boot was on /dev/vda1 during installation UUID=0da490ac-183d-45cd-a490-5d7ac3663337 /boot ext2 defaults 0 2 /dev/mapper/vg0-export /export ext4 defaults 0 2 /dev/mapper/vg0-home /home ext4 defaults 0 2 /dev/mapper/vg0-var /var ext4 defaults 0 2 /dev/mapper/vg0-mysql /var/lib/mysql ext4 defaults 0 2 /dev/mapper/vg0-pgsql /var/lib/postgresql ext4 defaults 0 2 /dev/mapper/vg0-swap none swap sw 0 0 

Le csh ne présente pas ce comportement; c'est bash seulement autant que je peux le dire.

Que se passe-t-il et comment puis-je désactiver cela?

Mettre à jour

J'ai copié bash depuis mon système Fedora 13 et je l'ai mis dans mon directory personnel. Cette version ne présente pas le problème.

 bbrown@cs:~$ /bin/bash --version GNU bash, version 4.2.24(1)-release (x86_64-pc-linux-gnu) Copyright (C) 2011 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software; you are free to change and redissortingbute it. There is NO WARRANTY, to the extent permitted by law. bbrown@cs:~$ ls -l /bin/bash -rwxr-xr-x 1 root root 955024 Apr 3 08:58 /bin/bash bbrown@cs:~$ ls -l ./bash -rwxr-xr-x 1 bbrown bbrown 904664 Sep 11 13:02 ./bash bbrown@cs:~$ ./bash --version GNU bash, version 4.1.7(1)-release (x86_64-redhat-linux-gnu) Copyright (C) 2009 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software; you are free to change and redissortingbute it. There is NO WARRANTY, to the extent permitted by law. bbrown@cs:~$ exec ./bash bbrown@cs:~$ umask 0027 bbrown@cs:~$ cd / bbrown@cs:/$ umask 0027 

Comme demandé, voici la sortie de type cd :

 bbrown@cs:~$ type cd cd is a function cd () { if builtin cd "$@"; then [[ -n "${rvm_current_rvmrc:-}" && "$*" == "." ]] && rvm_current_rvmrc="" || true; __rvm_do_with_env_before; __rvm_project_rvmrc; __rvm_after_cd; __rvm_do_with_env_after; return 0; else return $?; fi } 

C'est révélateur. RVM a pris le contrôle de la command cd . C'est ennuyeux, mais cela explique certainement ce qui se passe.

cd ne change pas le umask. Soit vous avez surchargé le cd , soit vous avez un crochet avant ou après la command.

Vérifiez que cd n'a pas été surchargé en exécutant le type cd . Cela vous montrera si c'est un "shell embedded" (bon) ou un alias ou une fonction (suspect).

Exécutez echo "$PROMPT_COMMAND" pour voir si vous avez un hook post-command (bash évalue la valeur de cette variable avant d'afficher chaque invite). Vérifiez également qu'un piège de debugging est exécuté avant chaque command avec le trap -p DEBUG .