Existe uma maneira de paginar a saída canalizando-a para algum comando 'mais', que está disponível em shells linux \ unix?
powershell
Valentin Vasilyev
fonte
fonte
Respostas:
Bom ... Tem "mais", que é mais ou menos (...) o mesmo que você esperaria de outras plataformas. Experimente o seguinte exemplo:
fonte
Sim existe:
some-cmdlet | out-host -paging
fonte
less
é apenas um grande aplicativo de visualização de texto que aceitastdin
o texto. Você pode canalizá-lo para um arquivo temporário e abri-lo nonano
ouvim
para MESMO MOAR POWERRRR! Não é o ponto. PowerShell é comobash
(mas melhor, imho).less
não está embash
; é um binário separado. Portanto, sua crítica não é válida.oh
é paraOut-Host
e os parâmetros podem ser abreviados se não houver conflito, então o comando pode serSome-Cmdlet | oh -p
dir -rec | more
é um mau conselho.Isso fará com que o PowerShell avalie todo o comando antes de enviá-lo para a tela, algo que não é necessário para algo como a paginação de saída
Em alguns casos extremos, pode fazer com que o sistema trave (por exemplo
dir 'C:\' | more
)Por outro lado, o uso de
out-host -paging
exibirá as informações na tela conforme estiverem disponíveis.fonte
out-host -paging
funciona conforme desejado. Tubulação durante amore
execução do comando remoto é inútil: o texto inteiro é exibido de uma vez.out-host -paging
éoh -pa
.As extensões da comunidade Powershell têm uma função útil chamada 'less' que fornece um conjunto de recursos estilo Unix mais completo, usando uma cópia portada de less.exe para realmente lidar com a paginação.
Você pode instalá-lo iniciando um shell de administrador e executando:
(
force
é para atualizar versões mais antigas)Você pode enviar strings para ele ou fornecer nomes de arquivos como parâmetros diretos.
Ele funciona nas janelas ConEmu e Powershell, mas infelizmente não funciona da maneira que você esperaria no ISE v2.0.
fonte
force
é para atualizar versões anteriores" parece um um pouco enganador.Find-Package pscx | Install-Package -Force -scope currentuser -allowclobber
Eu prefiro o comando "menos" ao comando "mais". Com o comando less, os resultados também podem ser paginados para trás em vez de apenas para frente.
O "menos" do Git para Windows funciona para mim (Meu caminho é
C:\Program Files (x86)\Git\usr\less.exe
. Tive erros no Powershell com a versão Gow de "menos".Exemplo:
ls|less
Para economizar na digitação, adicionei o alias "l" para menos no meu perfil do Powershell:
sal l "C:\Program Files (x86)\Git\bin\less.exe"
fonte
less
fã aqui. Mas eu recebo este erro. Algum conselho? ________________________________________PS C:\Users\oli> Get-Content tmpf | out-host 'C:\Program Files\Git\usr\bin\less.exe' Out-Host : A positional parameter cannot be found that accepts argument 'C:\Program Files\Git\usr\bin\less.exe'. At line:1 char:20 + Get-Content tmpf | out-host 'C:\Program Files\Git\usr\bin\less.exe' + CategoryInfo : InvalidArgument: (:) [Out-Host], ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.OutHostCommand
fonte
more
não é usado para limitar a saída, é usado para paginar a saída e tornar mais fácil a leitura em um terminal, se houver.Você está falando em usar
head
etail
? EggHeadCafe tem um exemplo de:para emular
head
etail
.fonte
head
etail
agora no PowerShell: stackoverflow.com/a/41626586/1081043Adicionei uma definição de função e um alias ao meu perfil padrão em
%SystemRoot%\system32\windowspowershell\v1.0\profile.ps1
Esta função é baseada principalmente nesta entrada de blog de Aman Dhally com manipulação de exceção adicionada para pressionar
Q
durante a paginação.então posso apenas chamá-lo assim
dir -r | more
e ele imediatamente inicia a saída paginada por causa do pipeline do PowerShell (em vez de esperar pela saída completa com more.com).fonte
Se você instalou o VIM, eu gosto muito
dir -r | vim -R -
. Infelizmente, isso sofre o mesmo problema commore
(ou seja, sem streaming).fonte
cat é um alias para Get-Content - com arquivos maiores você obterá a saída - More - na parte inferior do terminal
Você também pode adicionar -wait
-wait é como usar tail, mas na verdade está executando novamente o comando apenas atualizando a saída
oh = Out-Host
fonte
Eu tinha exatamente esta pergunta (bem, eu queria menos, não mais) e descobri que a resposta @ richard-berg funcionou para mim, sendo novo no PowerShell (mas não no Linux), achei o que estava faltando nessa resposta (para mim) foram: Eu primeiro precisava ir:
Find-Package pscx | Install-Package
que então solicitou "instalar o pacote nuget". Eu fiz isso, mas depois tive que usar o
-AllowClobber
parâmetro ativadoInstall-Package
.então, para usar menos, eu tive que: o
Set-ExecutionPolicy RemoteSigned
que funcionou :-)
fonte
Sugestão: coloque o arquivo em um arquivo .txt temporário / descartável e deixe o SO invocar seu editor favorito, aquele que está vinculado à extensão .txt.
Get-Process | Out-File temp.txt; . \ temp.txt
Nota: cada vez que você usar isso, você substituirá qualquer arquivo temp.txt preexistente. Escolha o nome do arquivo com sabedoria.
O acima é apenas uma ideia básica.
O próximo passo seria transformar isso em "| mais" usando aliases ou funções de perfil, etc.
HTH, Marcelo Finkielsztein
fonte