Para responder à sua pergunta mais geral, esse é o trabalho de xargs
para obter uma lista de palavras na entrada padrão e convertê-la em uma lista de argumentos para um comando.
No entanto, xargs
espera a lista como espaço, tabulação e nova linha (e possivelmente mais caracteres em branco dependendo da localidade e implementação de xargs) lista separada de palavras onde aspas simples, aspas duplas e barra invertida são usadas para escapar desses separadores (com comportamentos variados com relação ao aninhamento daqueles por diferentes implementações de xargs).
Se a entrada for uma lista terminada por novas linhas, a forma canónica a converter para o formato esperado pelo xargs é para escapar de cada caractere (embora apenas barras invertidas, aspas simples, aspas duplas, sublinhado (potencialmente), espaço e tabulação (e possivelmente outros espaços em branco se não forem no local C) sejam necessárias um caractere de barra invertida, o que podemos fazer com sed
.
mpc | head -n 1 | sed 's/./\&/g' | xargs rm --
Note que algumas implementações de xargs
têm um limite bastante baixo no comprimento máximo de linha que eles esperam em stdin, então você pode querer apenas escapar dos caracteres necessários com aqueles.
Com o GNU xargs
, pelo menos, você não precisa fazer isso, você pode fazer:
mpc | head -n 1 | xargs -rd '\n' rm --
(também usando a opção -r específica do GNU para evitar a execução de qualquer comando se a entrada estiver vazia).