Como evitar a necessidade de emitir "y" várias vezes ao remover o arquivo protegido

52

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?

Iancovici
fonte
Você pode definir uma função. Essa multidão pode ajudá-lo: stackoverflow.com/questions/756756/… .
Alpert
Por que você quer fazer isso? É uma tarefa muito óbvia querer imprimir retornos de carro (em oposição a novas linhas) em qualquer caso, e em .bashrc?
L0b0
@ pergunta l0b0 editado para ser mais específico
Iancovici
Por que você deseja remover arquivos no .bashrc? A tarefa original ainda não está clara.
L0b0
3
@echadromani É muito comum no SO / SE tentar entender o problema original para fornecer uma solução ideal que pode ser aplicável a outras situações.
L0b0:

Respostas:

75

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'

yesrepete qualquer sequência que você especificar infinitamente, separada por novas linhas. heado interrompe após o $numbertempo e trconverte 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 bashtubo pode o resultado para od, hexdumpou xxdpara ver os caracteres reais retornados.

l0b0
fonte
7

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 rmou 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 .

slm
fonte
5

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 rmpergunta:

rm -rf somedir

e

rm -r --interactive=never somedir

(ambos também funcionam sem -rexcluir arquivos em vez de diretórios)

explicação:

-ffaz rmpara "ignorar arquivos e argumentos inexistentes, nunca solicitar".

--interactive=neverfaz o que diz: nunca seja interativo. em outras palavras: nunca solicite.

a diferença entre -fe --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 rmser 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

lesmana
fonte
1

apenas dê sim a todos os seus comandos!

yes | rm -r /path/
yes | <command>

De qualquer forma, você sempre pode forçar usando -f:

rm -r -f /path
Nakamoto
fonte
-2

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

Gopal Prasad
fonte
Isso está sendo diminuído porque remove o diretório inteiro. Presumivelmente, o OP só deseja remover o arquivo em questão, nem todos os arquivos na mesma subárvore de diretório.
Jake
Ei .... Pode ser que você esteja certo.
Gopal Prasad
Ei .... Pode ser que você esteja certo. Mas não neste caso. Como se um usuário tivesse muita paciência e tempo, ele também teria tempo para dar 'sim' várias vezes ... Supus que ele desejasse remover todos os arquivos com um único comando. arquivo protegido sempre solicite confirmação antes de excluir esse tipo de arquivo. Um exemplo é o caso quando você cria o virtualenv e depois deseja remover em python. Experimente e você encontrará o comando rm solicitando confirmação e sempre você tem que dar uma resposta .. Eu resolvi a situação dessa maneira.
Gopal Prasad