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
xargsonde inserir os nomes dos arquivos, eles serão adicionados no final da linha de comando. - Você deve usar a opção
-L1ou seu equivalente, portanto,xargssomente passa um argumento parash. - O uso da saída de
lspode ter efeitos indesejados .
Editar
Removidas as opções obsoletas, obrigado TechZilla