Aqui está uma abordagem juntando colar, sed, ls e salvando-a no bashrc. Tem duas partes principais:
- um "custom_command" aqui que leva argumentos, mas apenas prefixos a cada argumento passado para ele, com "YYY" e acrescenta "ZZZ", o CustomCommand real do OP faria naturalmente algo diferente
- um alias chamado "ls1" que inclui chamar custom_command. Chamado de "ls1" para evitar conflito com "ls" porque ainda dependemos de "ls"
Então, no seu ~ / .bashrc, adicione:
custom_command ()
{
for i; do
echo "YYY${i}ZZZ"
done
}
alias ls1='paste <( ls -lh | sed 1d ) <( custom_command * )'
E, em seguida, . ~/.bashrc
para torná-lo efetivo no terminal atual.
Se o diretório atual contiver 'dir1' 'file1' 'file2' e 'file 3' (para testar um arquivo com espaços), você pode executar o alias ls1
e ver:
$ ls1
drwxr-xr-x 2 meme meme 4.0K Sep 22 14:33 dir1 YYYdir1ZZZ
-rw-r--r-- 1 meme meme 8 Sep 22 13:51 file1 YYYfile1ZZZ
-rw-r--r-- 1 meme meme 8 Sep 22 13:51 file2 YYYfile2ZZZ
-rw-r--r-- 1 meme meme 14 Sep 22 15:45 file 3 YYYfile 3ZZZ
Explicação
custom_command ()
{
for i; do
echo "YYY${i}ZZZ"
done
}
- O
for i
sem especificar mais nada fará com que o loop use os parâmetros posicionais
- as chaves são necessárias para distinguir a variável i, caso contrário o bash interpretará erroneamente $ iZZZ como uma variável
Exemplo de saída:
$ custom_command a b c
YYYaZZZ
YYYbZZZ
YYYcZZZ
Quando usado com a expansão *
bash:
$ custom_command *
YYYdir1ZZZ
YYYfile1ZZZ
YYYfile2ZZZ
YYYfile 3ZZZ
O "ls -lh" normalmente fará isso:
$ ls -lh
total 16K
drwxr-xr-x 2 meme meme 4.0K Sep 22 14:33 dir1
-rw-r--r-- 1 meme meme 8 Sep 22 13:51 file1
-rw-r--r-- 1 meme meme 8 Sep 22 13:51 file2
-rw-r--r-- 1 meme meme 14 Sep 22 15:45 file 3
Usando sed, 1 significa linha 1, d para excluir, para remover a primeira linha:
$ ls -lh | sed 1d
drwxr-xr-x 2 meme meme 4.0K Sep 22 14:33 dir1
-rw-r--r-- 1 meme meme 8 Sep 22 13:51 file1
-rw-r--r-- 1 meme meme 8 Sep 22 13:51 file2
-rw-r--r-- 1 meme meme 14 Sep 22 15:45 file 3
O programa paste
e a% de <(...)
de processo são a chave para combinar essas saídas separadas. Colar normalmente espera arquivos como argumentos, por exemplo, paste data1 data2
. Usamos a substituição de processos do bash para que a saída de comandos apareça para colar como arquivos comuns com os quais ele pode trabalhar, assim:
$ paste <( ls -lh | sed 1d ) <( custom_command * )
drwxr-xr-x 2 meme meme 4.0K Sep 22 14:33 dir1 YYYdir1ZZZ
-rw-r--r-- 1 meme meme 8 Sep 22 13:51 file1 YYYfile1ZZZ
-rw-r--r-- 1 meme meme 8 Sep 22 13:51 file2 YYYfile2ZZZ
-rw-r--r-- 1 meme meme 14 Sep 22 15:45 file 3 YYYfile 3ZZZ
O uso do bashrc meramente salva este comando para reutilização conveniente em novos terminais, ou terminais existentes onde você executa . ~/.bashrc
para recarregar o bash.