Como o comando basename é executado antes de o pipeline ser executado. Para fazer isso funcionar, você precisa de xargs para executar o basename e pode fazer isso com sh -c
, por exemplo:
ls *.sh | xargs -L1 sh -c 'basename $1 .sh' dummy
Notas:
- Se você não disser
xargs
onde inserir os nomes dos arquivos, eles serão adicionados no final da linha de comando. - Você deve usar a opção
-L1
ou seu equivalente, portanto,xargs
somente passa um argumento parash
. - O uso da saída de
ls
pode ter efeitos indesejados .
Editar
Removidas as opções obsoletas, obrigado TechZilla