Estou procurando uma solução para ser usada como resposta a "rm: remover arquivo regular protegido contra gravação [x]?"
Eu estava pensando em emitir um caractere seguido de retorno de carro por várias vezes, no bashrc. Como fazemos isso?
Estou procurando uma solução para ser usada como resposta a "rm: remover arquivo regular protegido contra gravação [x]?"
Eu estava pensando em emitir um caractere seguido de retorno de carro por várias vezes, no bashrc. Como fazemos isso?
Respostas:
Edite com base na pergunta atualizada:
Para evitar ser perguntado sobre a remoção de arquivos, adicione a opção -f
("force"):
rm -f /path/to/file
Isso tem um efeito colateral que você deve estar ciente: Se algum dos caminhos fornecidos não existir, ele não reportará isso e retornará com êxito:
$ rm -f /nonexistent/path
$ echo $?
0
Resposta original:
Aqui está uma solução simples:
yes "$string" | head -n $number | tr $'\n' $'\r'
yes
repete qualquer sequência que você especificar infinitamente, separada por novas linhas. head
o interrompe após o $number
tempo e tr
converte as novas linhas em retornos de carro. Você pode não ver nenhuma saída devido aos retornos de carro, mas passá-la para este comando (in bash
) deve ilustrá-la:
printf %q "$(yes "$string" | head -n $number | tr $'\n' $'\r')"
Usuários sem bash
tubo pode o resultado para od
, hexdump
ou xxd
para ver os caracteres reais retornados.
O outro problema que de vez em quando me deparo rm
é com um alias rm -i
, algo assim no / etc / bashrc:
alias rm='rm -i'
Nesse caso, você pode, unalias rm
ou pode usar esse truque que eu descobri anos atrás, colocar uma barra invertida na frente de um comando com alias, para ignorar o alias apenas uma vez, por exemplo:
\rm somefile
Você pode aprender mais sobre aliases em um artigo da Nixcraft .
rm
é codificado para pedir "interativamente" (prompt aguardando a entrada do usuário) em arquivos protegidos contra gravação. existem dois métodos para impedir a rm
pergunta:
rm -rf somedir
e
rm -r --interactive=never somedir
(ambos também funcionam sem -r
excluir arquivos em vez de diretórios)
explicação:
-f
faz rm
para "ignorar arquivos e argumentos inexistentes, nunca solicitar".
--interactive=never
faz o que diz: nunca seja interativo. em outras palavras: nunca solicite.
a diferença entre -f
e --interactive=never
é esta parte: "ignore arquivos e argumentos inexistentes".
comparar:
$ rm -rf nonexistingname
$ echo $?
0
e
$ rm -r --interactive=never nonexistingname
rm: cannot remove 'nonexistingname': No such file or directory
$ echo $?
1
a diferença é principalmente interessante ao escrever scripts nos quais você nunca deseja rm
ser interativo, mas ainda deseja lidar com erros.
resumo: no uso da linha de comando rm -rf
. em scripts use rm -r --interactive=never
.
para obter uma resposta à pergunta indicada ("Como evitar a necessidade de emitir" y "várias vezes ao remover o arquivo protegido"), consulte https://askubuntu.com/questions/338857/automatically-enter-input-in-command-line / 338860 # 338860
Eu também tive o mesmo problema. A resposta acima é apenas para um arquivo, mas se você deseja ignorar muito sim.
Você pode usar
sudo rm -r /path/to/directory
remover todos os arquivos regulares protegidos contra gravação