Os comandos que leem stdin
são quase todos da família de filtros, ou seja, programas que transformam um fluxo de dados de texto em um transformado.
cat
, sed
, awk
, gzip
e até sh
são bons exemplos desses "filtros".
Os comandos citados, cp
, mv
e rm
definitivamente não são filtros, mas comandos que fazem coisas com os argumentos passados, aqui arquivos ou diretórios.
O comando cd
é semelhante a eles, espera um argumento (ou simula um padrão se não for fornecido) e geralmente não produz nada em stdout
, embora possa produzir algo nele em alguns casos como quando usando CDPATH
.
Mesmo que se deseje criar uma variante cd
que retire o diretório de destino de stdin, isso não teria nenhum efeito quando usado em um pipeline no shell Bourne, dash
e bash
para citar alguns . O último componente do comando que está sendo executado em um subshell, a mudança para um novo diretório não afetará o shell atual. Por exemplo, echo /tmp | cd
funcionaria com ksh93
, mas não bash
, dash
, zsh
, sh
, ...
cd <(echo /tmp)
funcionaria com shells suportando a substituição do processo (pelo menos ksh
, bash
, zsh
), mas não teria nenhuma vantagem significativa em comparação com cd $(echo tmp)
O único caso de uso que pode ser de interesse seria algo como:
echo tmp | (cd ; pwd)
Por fim, essa variante precisaria resolver o caso em que não foi dado nenhum argumento, mas o comportamento esperado é alterar o diretório para a casa do usuário ou não foi dado nenhum argumento, mas o comportamento esperado é ler o nome do arquivo. diretório de destino do stdin. Como não há maneira confiável de decidir, isso está condenado.