O comando tee
, quando passou um arquivo não existente como parâmetro, criará esse arquivo antes de gravar a saída nele. Ao prefixar esse comando com sudo
, você está pedindo ao shell para executar o comando tee
como root
. A consequência é que o arquivo criado por tee
é de propriedade do usuário que está iniciando o comando: root
e, portanto, é somente leitura para outros usuários. Você mesmo poderá ver isso se executar ls -l
e examinar as colunas user
e group
.
$ rm -f writeProtectedFile # Removing the file in case it already exists
$ echo $text | sudo tee writeProtectedFile
yourtext
$ ls -l
total 4
-rw-r--r-- 1 root root 9 22.07.2015 14:26 writeProtectedFile
Existem várias opções para superar isso:
-
Crie o arquivo como um usuário padrão antes de solicitar que
tee
grave nele.tee
truncará ou simplesmente--append
, sem alterar a propriedade:$ touch writeProtectedFile # creates the file as standard user $ echo $text | sudo tee writeProtectedFile $ rm writeProtectedFile
-
Altere a propriedade do arquivo antes de tentar excluí-lo:
$ echo $text | sudo tee writeProtectedFile $ sudo chown $(whoami) writeProtectedFile # 'whoami' returns the current user name $ rm writeProtectedFile
-
Diga a
rm
para ignorar o fato de que o arquivo está protegido contra gravação, usando-f, --force
:$ echo $text | sudo tee writeProtectedFile $ rm --force writeProtectedFile