Comparação de shells de comando - Comparison of command shells
Um shell de comando é uma interface de linha de comando para interagir e manipular o sistema operacional de um computador .
Características gerais
Concha | Ambiente usual | Normalmente invocado | Introduzido | Plataforma independente | Shell de login padrão em | Shell de script padrão em | Licença | Disponibilidade do código fonte | Interface de usuário | Suporte para mouse | Suporte Unicode | Suporte ISO 8601 | Redirecionamento de console | Redirecionamento de fluxo | Configurabilidade | Scripts de inicialização / desligamento | Scripts de lote | Exploração madeireira | disponível como executável de arquivo único independente estaticamente vinculado |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Concha de Thompson | UNIX | sh | 1971 | N / D | UNIX | UNIX | N / D | sim | CLI baseada em texto | Não | Não | N / D | sim | N / D | N / D | N / D | N / D | N / D | N / D |
Bourne shell versão 1977 | 7ª Ed. UNIX | sh | 1977 | sim | 7ª Ed. UNIX | 7ª Ed. UNIX , | Proprietário | sim | CLI baseada em texto | Não | Não | N / D | sim | Sim ( fds arbitrário ) | Sim (por meio de variáveis e opções) | Sim ( .perfil ) | Sim (recurso Unix) | Não | sim |
Versão atual do Bourne shell | Vários UNIX | sh | 1977 | sim | SunOS-5.x, FreeBSD (usuário não root) | SunOS-5.x | CDDL | sim | CLI baseada em texto | Não | sim | N / D | sim | Sim ( fds arbitrário ) | Sim (por meio de variáveis e opções) | Sim ( .perfil ) | Sim (recurso Unix) | sim | sim |
Shell POSIX | POSIX | sh | 1992 | N / D | N / D | POSIX | N / D | N / D | CLI baseada em texto | Não | Sim, se usado pelo local configurado | N / D | sim | Sim ( fds arbitrário ) | Sim (por meio de variáveis e opções) | Não especificado ( .perfil fornecido como exemplo) | Sim (recurso Unix) | sim | N / D |
bash (v4) | POSIX | bash, sh | 1989 | sim | GNU , Linux (padrão para root), macOS 10.3-10.14 | GNU , Linux , Haiku , macOS 10.3-10.14 | GPL | sim | CLI baseada em texto | Não | sim | Sim ( printf embutido) | sim | Sim ( fds arbitrário ) | Sim (por meio de variáveis e opções) | Sim ( / etc / profile , .bash_profile , .bash_login , .profile , .bashrc ) | Sim (recurso Unix) | sim | sim |
csh | POSIX | csh | 1978 | sim | SunOS | ? | BSD | sim | CLI baseada em texto | Não | Não | ? | sim | Sim ( stdin , stdout , stdout + stderr ) | Sim (por meio de variáveis e opções) | Sim ( ~ / .cshrc , ~ / .login , ~ / .logout ) | Sim (recurso Unix) | sim | sim |
tcsh | POSIX | tcsh, csh | 1983 | sim | FreeBSD (padrão para root), antigo Mac OS X | ? | BSD | sim | CLI baseada em texto | Não | sim | ? | sim | Sim ( stdin , stdout , stdout + stderr ) | Sim (por meio de variáveis e opções) | Sim ( /etc/csh.cshrc , /etc/csh.login , ~ / .tcshrc , ~ / .cshrc , ~ / .history , ~ / .login , ~ / .cshdirs ) | Sim (recurso Unix) | sim | sim |
Shell Hamilton C | Win32 , OS / 2 | csh | 1988 | Sim (a versão OS / 2 não é mais mantida) | Opcional | Opcional | Proprietário | Não | CLI baseada em texto | Não | Não | Sim (operador -t timestamp) | sim | Sim ( stdin , stdout , stdout + stderr ) | Sim (por meio de variáveis e opções) | Sim (via login.csh, startup.csh e logout.csh) | Sim (opção de linha de comando) | sim | sim |
Scsh | POSIX | scsh | 1994 | sim | ? | ? | Estilo BSD | sim | ? | ? | ? | ? | ? | sim | ? | ? | ? | ? | sim |
ksh (ksh93t +) | POSIX | ksh | 1983 | sim | AIX , HP-UX | OpenSolaris | Licença Pública Comum | sim | CLI baseada em texto | Não | sim | Sim ( printf embutido com % (% F) T ) | sim | Sim ( fds arbitrário ) | Sim (por meio de variáveis e opções) | Sim (sistema e perfil de usuário e kshrc ) | Sim (recurso Unix) | sim | sim |
pdksh | POSIX | ksh, sh | 1989? | sim | OpenBSD | OpenBSD | Domínio público | sim | CLI baseada em texto | Não | Não | N / D | sim | Sim ( fds arbitrário ) | Sim (por meio de variáveis e opções) | Sim ( / etc / profile , .profile ) | Sim (recurso Unix) | sim | sim |
zsh | POSIX | zsh | 1990 | sim | Deepin , GoboLinux , Grml , macOS 10.15+ | Grml , macOS 10.15+ | Estilo MIT | sim | CLI baseada em texto | via código adicional | sim | Sim (vários recursos internos envolvendo a data, usando o formato % F strftime e a opção -i para o fc integrado) | sim | Sim ( fds arbitrário ) | Sim (por meio de variáveis, opções, funções, estilos, etc.) | Sim (sistema e usuário zshenv , zprofile , zshrc , zlogin , zlogout ) | Sim (recurso Unix) | sim | sim |
cinza | POSIX | sh | 1989 | sim | Sistemas baseados em Minix , BusyBox | Sistemas baseados em NetBSD , Minix , BusyBox | Estilo BSD | sim | CLI baseada em texto | Não | Parcial (para BusyBox, compatível com edição de linha de comando, mas não com manipulação de strings) | N / D | sim | Sim ( fds arbitrário ) | Sim (por meio de variáveis e opções) | Sim ( / etc / profile , .profile ) | Sim (recurso Unix) | sim | sim |
PCC | CP / M , MP / M | (CCP) | 1976 (1974) | Não | CP / M (sem login), MP / M | CP / M , MP / M | Freeware (originalmente proprietário) | Sim (código originalmente fechado) | CLI baseada em texto | Não | Não | Não | Não | Não | Não | Sim (automático via $$$. SUB ) | Parcial (apenas através do comando SUBMIT externo para atualizar $$$. SUB ) | Não | sim |
COMMAND.COM | DOS | COMANDO | 1980 | Não (implementações de terceiros, não vinculadas a um fornecedor ou versão específica do DOS, disponível) | DOS , Windows 95 , 98 , SE , ME | DOS , Windows 95 , 98 , SE , ME | específico do fornecedor, por exemplo, MS - EULA ou BSD / GPL (clones livres) | Não (exceto para OpenDOS, DR-DOS, PTS / DOS e FreeDOS) | CLI baseada em texto | Não | Não | Não (exceto para DR-DOS) | Sim (via COMANDO con: ou CTTY con: ) | Sim ( stdin , stdout ) | Sim (por meio de parâmetros de inicialização e variáveis de ambiente, o DR-DOS também oferece suporte ao comando de alternância padrão do usuário DIR / C / R ) | Sim (automático \ AUTOEXEC.BAT para shell primário ou explicitamente via / P , /P:filename.bat ou opções de inicialização / K ) | Sim (via comando CALL ou opções de inicialização / C e / K ) | Não | sim |
OS / 2 CMD.EXE | OS / 2 , eComStation , ArcaOS | CMD | 1987 | Não | OS / 2 , eComStation , ArcaOS | OS / 2 , eComStation , ArcaOS | IBM - EULA | Não | CLI baseada em texto | Não | Não | Não | Não | Sim ( stdin , stdout , stderr ) | ? | Parcial (apenas via opção de inicialização / K ) | Sim (via comando CALL ou opções de inicialização / C e / K ) | Não | sim |
Windows CMD.EXE | Win32 | CMD | 1993 | Não | Windows NT, 2000, XP, Server 2003, Vista | Windows NT, 2000, XP, Server 2003, Vista | MS - EULA | Não | CLI baseada em texto | Não | Parcial ( CHCP 65001 para UTF-8 , mas os argumentos do programa ainda estão codificados na página de código local) | Não | Não | sim | Sim (via registro, parâmetros de inicialização e variáveis de ambiente) | Sim (automático via registro ou explicitamente via opção de inicialização / K ) | Sim (via comando CALL ou opções de inicialização / C e / K ) | Não | sim |
4DOS , NDOS | DOS , Windows 95 , 98 , SE , ME | 4DOS , NDOS | 1989 (1986) | Não (não vinculado a um fornecedor ou versão de sistema operacional específico) | Opcional | Opcional | Licença MIT , com restrições | sim | CLI baseada em texto com extensões TUI | Sim (pop-ups, sistema de ajuda, variável interna % _MOUSE , comando INKEY / M ) | Não | sim | Sim (via CTTY con:, exceto para DRAWBOX , DRAWLINE , DRAWVLINE , LIST , SCREEN , SCRPUT , SELECT , VSCRPUT comandos e coloração de arquivo / diretório) | Sim ( stdin , stdout , stderr , stdout + stderr ) | Sim (via 4DOS.INI / NDOS.INI arquivo, parâmetros de inicialização, variáveis de ambiente, SETDOS de comando) | Sim (automático \ AUTOEXEC.BAT para o shell primário e 4START.BTM / 4START.BAT , bem como 4EXIT.BTM / 4EXIT.BAT para qualquer shell, ou explicitamente via / P , /P:dir\nomedoarquivo.ext ou inicialização de / K opções) | Sim (via comando CALL ou opções de inicialização / C e / K ) | sim | sim |
4OS2 | OS / 2 , eComStation , ArcaOS | 4OS2 | 1992 | Não (não vinculado a versões específicas do OS / 2) | Opcional (mas empacotado com ArcaOS) | Opcional | freeware | sim | CLI baseada em texto | Não | Não | Não | Não | Sim ( stdin , stdout , stderr , stdout + stderr ) | Sim (via arquivo 4OS2.INI , parâmetros de inicialização, variáveis de ambiente, comando SETDOS ) | Sim (automático via 4START.CMD / 4START.BTM , bem como 4EXIT.CMD / 4EXIT.BTM arquivos, ou explicitamente via / K STARTUP.CMD opção) | Sim (via comando CALL ou opções de inicialização / C e / K ) | sim | ? |
TCC (anteriormente 4NT) | Win32 | TCC | 1993 | Não (não vinculado a versões específicas do NT) | opcional | opcional | Shareware | Não | CLI baseada em texto ( Take Command : GUI ) | Sim (mouse do console, pop-ups, sistema de ajuda, % _XMOUSE , % _YMOUSE variáveis internas, comando INKEY / M ) | sim | sim | Não | Sim ( stdin , stdout , stderr , stdout + stderr ) | Sim (via Registro, TCMD.INI / 4NT.INI arquivo, parâmetros de inicialização, variáveis de ambiente, SETDOS de comando) | Sim (automático via registro e TCSTART / 4START , bem como TCEXIT / 4EXIT , ou explicitamente via opção de inicialização / K ) | Sim (via comando CALL ou opções de inicialização / C e / K ) | sim | Não |
VMS DCL | OpenVMS | Automaticamente para login / processo interativo | 1977? | sim | VMS | VMS | Proprietário, empacotado em VMS | por licença especial apenas | CLI baseada em texto | com DECwindows / Motif | sim | Sim, pelo menos para o padrão de 1988 | sim | Sim ( sys $ input , sys $ output atribuição) | Sim (por meio de símbolos, nomes lógicos e opções) | Sim (SYS $ MANAGER: SYLOGIN.COM e LOGIN.COM definido pelo usuário) | sim | sim | Não |
PowerShell |
.NET , .NET Framework |
PowerShell | 2006 | sim | Windows 10, 8, Server 2008, 7 | Windows 10, 8, Server 2008, 7 | Estilo MIT | sim | CLI gráfica | sim | sim | sim | Não | sim | Sim (por meio de variáveis e opções) | Sim (% USERPROFILE% \ Documents \ WindowsPowerShell \ Microsoft.PowerShell_profile.ps1) | Sim (recurso PowerShell) | sim | Não |
rc | Plano 9 , POSIX | rc | 1989 | sim | Plano 9 , Versão 10 Unix | Plano 9 , Versão 10 Unix | Licença MIT | ? | ? | ? | sim | ? | ? | sim | ? | ? | ? | ? | sim |
BeanShell | Java | ? | 2005 | sim | ? | ? | LGPL | ? | ? | ? | sim | ? | ? | sim | ? | ? | ? | ? | Não |
peixe | POSIX | peixe | 2005 | sim | GhostBSD | ? | GPL | sim | CLI baseada em texto | ? | sim | ? | ? | Sim ( fds arbitrário ) | Sim (por meio de variáveis de ambiente e via interface da web por meio de fish_config ) | Sim ( /etc/fish/config.fish e ~ / .config / fish / config.fish ) | Sim (recurso Unix) | Sim ( ~ / .config / fish / fish_history * ) | ? |
Íon | Redox , Linux | íon | 2015 | sim | Redox | Redox | MIT | sim | CLI baseada em texto | ? | sim | sim | ? | Sim ( fds arbitrário ) | Sim (segue as especificações do diretório base XDG) | Sim ( ~ / .config / ion / initrc ) | sim | Sim ( ~ / .local / share / íon / histórico ) | Parcial (não distribuído como um executável autônomo, mas pode ser construído como um) |
Concha | Ambiente usual | Normalmente invocado | Introduzido | Plataforma independente | Shell de login padrão em | Shell de script padrão em | Licença | Disponibilidade do código fonte | Interface de usuário | Suporte para mouse | Suporte Unicode | Suporte ISO 8601 | Redirecionamento de console | Redirecionamento de fluxo | Configurabilidade | Scripts de inicialização / desligamento | Scripts de lote | Exploração madeireira | disponível como executável de arquivo único independente estaticamente vinculado |
Recursos interativos
Concha |
Completar nome de comando |
Conclusão do caminho |
Conclusão de argumento de comando |
Wildcard conclusão |
Histórico de comando |
Prompt de argumento obrigatório |
Sugestões automáticas |
Listagens coloridas do diretório |
Destaque de texto |
Destaque de sintaxe |
Histórico do diretório, pilha ou recursos semelhantes |
Mudança de diretório implícita |
Auto correção |
Ambiente integrado |
Trechos |
Prompt de valor |
Menu / prompt de opções |
Indicador de progresso |
Ajuda sensível ao contexto |
Construtor de comandos |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Concha de Thompson | Não | Não | Não | Não | Não | Não | Não | ? | ? | Não | Não | Não | Não | Não | Não | Não | Não | Não | Não | Não |
Bourne shell versão 1977 | Não | Não | Não | Não | Não | Não | Não | ? | ? | Não | Não | Não | Não | Não | Não | sim | Não | Externo | Não | Não |
Versão atual do Bourne shell | Não | sim | Não | Não | sim | Não | Não | sim | sim | Não | Sim (CDPATH, pushd, popd, dirs), CDPATH desde SVr4 | Não | Não | Não | Não | sim | Não | Externo | Não | Não |
Shell POSIX | Não | Não | Não | Não | sim | Não | Não | sim | sim | Não | Sim ( CDPATH ) | Não | Não | Não | Não | sim | Não | Externo | Não | Não |
bash (v4.0) | sim | sim | quando definido | sim | sim | Não | Não | sim | sim | Não | Sim ( CDPATH , pushd , popd ) | opcional | Não | Não | Não | sim | sim | Externo | Não | Não |
csh | sim | sim | Não | Não | sim | Não | Não | sim | sim | Não | Sim ( cdpath , pushd , popd ) | opcional | Não | Não | Não | sim | Não | Externo | Não | Não |
tcsh | sim | sim | quando definido | Não | sim | Não | Não | sim | sim | Não | Sim ( cdpath , pushd , popd ) | opcional | sim | Não | Não | sim | Não | Externo | Não | Não |
Shell Hamilton C | sim | sim | Não | sim | sim | Não | Não | ? | ? | Não | Sim ( cdpath , pushd , popd ) | Não | Não | Não | Não | sim | Não | Externo | Não | Não |
Scsh | Não | Não | Não | Não | Não | Não | Não | ? | ? | Não | Não | Não | Não | Não | Não | sim | Não | Externo | Não | Não |
ksh (ksh93t +) | Sim (extensível) | Sim (extensível) | Não | Não | sim | Não | Não | sim | sim | Não | Sim ( cdpath embutido, pushd , popd implementado como funções) | Não | Não | Não | Não | sim | sim | Externo | Não | Não |
pdksh | sim | sim | Não | Não | sim | Não | Não | sim | sim | Não | Não | Não | Não | Não | Não | sim | sim | Externo | Não | Não |
zsh | sim | sim | quando definido | sim | sim | sim | Sim (via previsão ou definido pelo usuário) | sim | sim | Extensão de terceiros | sim | opcional | sim | Não | quando definido (como widgets ZLE) | sim | sim | Externo | sim | Não |
cinza | Não | Não | Não | Não | sim | Não | Não | sim | sim | Não | Não | Não | Não | Não | Não | sim | sim | Externo | Não | Não |
PCC | Não | Não | Não | Não | Não | Não | Não | Não | Não | Não | Não | Não | Não | Não | Não | Não | Não | Não | Não | Não |
COMMAND.COM | Não | Não | Não | Não | Não | Não | Não | Não | Não (apenas no DR-DOS por meio de % $ ON% , % $ OFF% , % $ HEADER% , % $ FOOTER% ) | Não | Não | Não | Não | Não (apenas passo único com COMMAND / Y) | Não | Não | Não (apenas via comando CHOICE externo , no DR-DOS também via comandos internos SWITCH / DRSWITCH ) | Não | Não | Não |
OS / 2 CMD.EXE |
sim | sim | Não | Não | sim | Não | Não | Não | Não | Não | Não | Não | Não | Não | Não | Não | Não | Não | Não | Não |
Windows CMD.EXE |
parcial | parcial | Não | Não | Sim ( F8 ) | Não | Não | Não | Não | Não | Sim ( PUSHD , POPD ) | Não | Não | Não | Não | Sim (via comando SET / P ) | Não | Não | Não | Não |
4DOS | sim | sim | sim | sim | sim | Não | Não | sim | Não | Não | (via pop-up, pesquisas de diretório estendidas, CDPATH , PUSHD , POPD , DIRHISTORY , DIRS , CDD , CD - comandos e função % @ DIRSTACK [] ) | sim | Não | sim | Não | Sim (via comandos INPUT , INKEY e ESET ) | Sim (por meio da função @SELECT [] e indiretamente por meio de uma combinação dos comandos INKEY , INPUT , SWITCH ) | Não | sim | Não (exceto para o comando OPTION para diretivas de arquivo INI) |
4OS2 | ? | ? | ? | ? | sim | Não | Não | sim | Não | Não | sim | sim | Não | ? | Não | ? | ? | Não | sim | Não |
TCC (anteriormente 4NT) | sim | sim | sim | sim | sim | Não | Não | sim | Não | sim | (via pop-up, pesquisas de diretório estendidas, CDPATH , PUSHD , POPD , DIRHISTORY , DIRS , CDD , CD - comandos e função % @ DIRSTACK [] ) | sim | Não | sim | Não | Sim (via comandos INPUT , INKEY , ESET e SET / P ) | Sim (por meio da função @SELECT [] e indiretamente por meio de uma combinação dos comandos INKEY , INPUT , SWITCH ) | Não | sim | Não |
PowerShell | sim | sim | sim | sim | Sim ( F8 ) | sim | Sim, no ISE | ? | ? | Sim, no módulo ISE e PSReadLine (incluído na v5.0) | Sim; várias pilhas; vários tipos de localização | Não | Sim, no módulo PSReadLine | Sim, no ISE | Sim, no ISE | sim | sim | sim | Sim, no ISE | janela de pop-up |
rc | sim | sim | Não | Não | sim | Não | Não | ? | ? | Não | Não | Não | Não | Não | Não | ? | Não | Não | Não | Não |
BeanShell | sim | sim | Não | Não | Não | Não | Não | ? | ? | Não | Não | Não | Não | Não | Não | Não | Não | Não | Não | Não |
VMS DCL | Esquema de exclusividade mínima | Não | Não | Não | sim | sim | Não | ? | ? | Não | Não | Não | Não | Não | Não | sim | Não | Não | Não | Não |
peixe | sim | sim | quando definido ou analisável nas páginas do manual | sim | sim | Não | sim | sim | Sim (auxiliar integrado disponível) | sim | sim | sim | sim | sim | Sim, usando o comando abbr | sim | (via comando fish_config ) | Não | Não | Não |
Concha |
Completar nome de comando |
Conclusão do caminho |
Conclusão de argumento de comando |
Wildcard conclusão |
Histórico de comando |
Prompt de argumento obrigatório |
Sugestões automáticas |
Listagens coloridas do diretório |
Destaque de texto |
Destaque de sintaxe |
Histórico do diretório, pilha ou recursos semelhantes |
Mudança de diretório implícita |
Auto correção |
Ambiente integrado |
Trechos |
Prompt de valor |
Menu / prompt de opções |
Indicador de progresso |
Ajuda sensível ao contexto |
Construtor de comandos |
Execução em segundo plano
A execução em segundo plano permite que um shell execute um comando em segundo plano. Os shells POSIX e outros shells Unix permitem a execução em segundo plano usando o caractere & no final do comando e, no PowerShell, você pode usar os comandos Start-Process
ou Start-Job
.
Completações
Os recursos de completação auxiliam o usuário a digitar comandos na linha de comando, procurando e sugerindo palavras correspondentes para palavras incompletas. A conclusão é geralmente solicitada pressionando a tecla de conclusão (geralmente a Tab ↹tecla).
A conclusão do nome do comando é a conclusão do nome de um comando. Na maioria dos shells, um comando pode ser um programa no caminho do comando (geralmente $PATH
), um comando embutido, uma função ou apelido.
A conclusão do caminho é a conclusão do caminho para um arquivo, relativo ou absoluto.
O preenchimento curinga é uma generalização do preenchimento do caminho, em que uma expressão corresponde a qualquer número de arquivos, usando qualquer sintaxe compatível para correspondência de arquivo .
A conclusão de variável é a conclusão do nome de um nome de variável ( variável de ambiente ou variável de shell). Bash, zsh e fish completam todos os nomes de variáveis. O PowerShell tem conclusões para nomes de variáveis de ambiente, nomes de variáveis de shell e - de dentro de funções definidas pelo usuário - nomes de parâmetros.
A conclusão do argumento do comando é a conclusão dos argumentos de um comando específico. Existem dois tipos de argumentos, nomeados e posicionais: Os argumentos nomeados, geralmente chamados de opções , são identificados por seu nome ou letra que precede um valor, enquanto os argumentos posicionais consistem apenas no valor. Alguns shells permitem completar nomes de argumentos, mas poucos suportam completar valores.
Bash, zsh e fish oferecem a conclusão do nome do parâmetro por meio de uma definição externa ao comando, distribuída em um arquivo de definição de conclusão separado. Para conclusões de nome / valor de parâmetro de comando, esses shells assumem a conclusão do caminho / nome do arquivo se nenhuma conclusão for definida para o comando. A conclusão pode ser configurada para sugerir conclusões chamando uma função shell. O fish shell adicionalmente suporta a análise de páginas de manual para extrair informações de parâmetros que podem ser usadas para melhorar conclusões / sugestões. No PowerShell, todos os tipos de comandos (cmdlets, funções, arquivos de script) expõem de forma inerente dados sobre os nomes, tipos e intervalos / listas de valores válidos para cada argumento. Esses metadados são usados pelo PowerShell para suportar automaticamente o nome do argumento e a conclusão do valor para comandos / funções integrados, comandos / funções definidos pelo usuário, bem como para arquivos de script. Os cmdlets individuais também podem definir a conclusão dinâmica de valores de argumento, em que os valores de conclusão são calculados dinamicamente no sistema em execução.
Histórico de comando
Um usuário de um shell pode descobrir que está digitando algo semelhante ao que o usuário digitou antes. Se o shell suportar o histórico de comandos, o usuário pode chamar o comando anterior no editor de linha e editá-lo antes de emiti-lo novamente.
Os shells que suportam a conclusão também podem ser capazes de concluir diretamente o comando do histórico de comandos, dada uma parte parcial / inicial do comando anterior.
A maioria dos shells modernos suporta histórico de comando. Os shells que suportam o histórico de comandos em geral também suportam a conclusão do histórico em vez de apenas recuperar comandos do histórico. Além do texto de comando simples, o PowerShell também registra a hora de início e término da execução e o status da execução no histórico do comando.
Solicitação de argumento obrigatória
Argumentos / parâmetros obrigatórios são argumentos / parâmetros aos quais deve ser atribuído um valor ao invocar o comando, função ou arquivo de script. Um shell que pode determinar antes da chamada que existem valores obrigatórios ausentes pode ajudar o usuário interativo solicitando esses valores em vez de deixar o comando falhar. Ter o prompt do shell para valores ausentes permitirá que o autor de um script, comando ou função marque um parâmetro como obrigatório em vez de criar o código do script para solicitar os valores ausentes (após determinar que está sendo executado interativamente) ou falhar com um mensagem.
O PowerShell permite que comandos, funções e scripts definam argumentos / parâmetros como obrigatórios . O shell determina, antes da invocação, se há algum argumento / parâmetro obrigatório que não foi vinculado e, então, solicitará ao usuário o (s) valor (es) antes da invocação real.
Sugestões automáticas
Os shells com sugestões automáticas exibem complementos de linha de comando opcionais conforme o usuário digita. O PowerShell e as cascas de peixe oferecem suporte nativo a esse recurso; pressionar a Tab ↹tecla insere a conclusão.
As implementações desse recurso podem diferir entre os shells; por exemplo, PowerShell e zsh usam um módulo externo para fornecer conclusões, e fish deriva suas conclusões do histórico de comandos do usuário.
Histórico do diretório, pilha ou recursos semelhantes
Os shells podem registrar um histórico de diretórios nos quais o usuário esteve e permitir a mudança rápida para qualquer local registrado. Isso é conhecido como "pilha de diretório". O conceito foi realizado já em 1978, no lançamento do C shell (csh).
O PowerShell permite que várias pilhas nomeadas sejam usadas. Os locais (diretórios) podem ser inseridos / retirados da pilha atual ou de uma pilha nomeada. Qualquer pilha pode se tornar a pilha atual (padrão). Ao contrário da maioria dos outros shells, o conceito de localização do PowerShell permite que as pilhas de localização mantenham as localizações do sistema de arquivos, bem como outros tipos de localização, como unidades / grupos organizacionais do Active Directory , bancos de dados / tabelas / objetos do SQL Server , aplicativos / sites / diretórios virtuais do Internet Information Server .
Os interpretadores de linha de comando 4DOS e seu sucessor gráfico Take Command Console também apresentam uma pilha de diretórios.
Mudança de diretório implícita
Um nome de diretório pode ser usado diretamente como um comando que altera implicitamente a localização atual do diretório.
Isso deve ser diferenciado de um recurso de unidade de carga não relacionado suportado por DOS Concorrente , DOS Multiusuário , System Manager e REAL / 32 , onde a letra da unidade L: será implicitamente atualizada para apontar para o caminho de carregamento de um aplicativo carregado, permitindo assim que os aplicativos referem-se a arquivos que residem em seu diretório de carregamento em uma letra de unidade padronizada, em vez de em um caminho absoluto.
Auto correção
Quando uma linha de comando não corresponde a um comando ou argumentos diretamente, a verificação ortográfica pode corrigir automaticamente erros comuns de digitação (como distinção entre maiúsculas e minúsculas , letras ausentes). Existem duas abordagens para isso; o shell pode sugerir correções prováveis na invocação do comando ou isso pode acontecer antes como parte de uma conclusão ou auto-sugestão.
Os shells tcsh e zsh apresentam verificação / correção ortográfica opcional, na chamada do comando.
Fish faz a autocorreção após a conclusão e a auto-sugestão. O recurso, portanto, não atrapalha ao digitar o comando inteiro e pressionar enter, enquanto o uso extensivo da guia e das teclas de seta para a direita torna o shell insensível a maiúsculas e minúsculas.
O módulo PSReadLine PowerShell (que é fornecido com a versão 5.0) oferece a opção de especificar um CommandValidationHandler ScriptBlock que é executado antes de enviar o comando. Isso permite a correção personalizada de comandos comumente digitados incorretamente e a verificação antes de realmente executar o comando.
Indicador de progresso
Um script de shell (ou trabalho) pode relatar o progresso de tarefas de longa execução para o usuário interativo.
Os sistemas Unix / Linux podem oferecer suporte a outras ferramentas usando indicadores de progresso de scripts ou como comandos independentes, como o programa "pv". Esses não são recursos integrados dos shells, no entanto.
O PowerShell tem um comando interno e funções de API (para serem usados ao criar comandos) para escrever / atualizar uma barra de progresso. As mensagens da barra de progresso são enviadas separadamente da saída de comando regular e a barra de progresso é sempre exibida no console de usuário interativo final, independentemente de as mensagens de progresso serem originadas de um script interativo, de um trabalho em segundo plano ou de uma sessão remota.
Mesa interativa
A saída de uma execução de comando pode ser exibida em uma tabela / grade que pode ser classificada e filtrada interativamente e / ou de outra forma manipulada após o término da execução do comando.
O cmdlet PowerShell Out-GridView exibe dados em uma janela interativa com classificação e filtragem interativas.
Listagens coloridas do diretório
Os processadores de linha de comando do JP Software fornecem colorização configurável pelo usuário de nomes de arquivos e diretórios em listagens de diretórios com base em sua extensão de arquivo e / ou atributos por meio de uma variável de ambiente% COLORDIR% definida opcionalmente.
Para os shells Unix / Linux, este é um recurso do comando ls e do terminal.
Destaque de texto
Os processadores de linha de comando no DOS Plus , Multiusuário DOS , REAL / 32 e em todas as versões do DR-DOS suportam uma série de variáveis de ambiente opcionais para definir sequências de escape, permitindo controlar o realce, reversão ou colorização do texto para fins de exibição ou impressão em comandos como TYPE . Todos os processadores de linha de comando mencionados suportam % $ ON% e % $ OFF% . Se definidas, essas sequências serão emitidas antes e depois dos nomes dos arquivos. Uma seqüência típica para% $ ON% seria \ 033 [1m em conjunto com ANSI.SYS , \ 033p para um terminal ASCII ou \ 016 para uma impressora IBM ou ESC / P. Da mesma forma, as sequências típicas para% $ OFF% seriam \ 033 [0m, \ 033q, \ 024, respectivamente. As variáveis % $ HEADER% e % $ FOOTER% são suportadas apenas por COMMAND.COM no DR-DOS 7.02 e superior para definir sequências emitidas antes e depois dos blocos de texto para controlar o destaque do texto, paginação ou outras opções de formatação.
Para os shells Unix / Linux, este é um recurso do terminal.
Realce de sintaxe
Um projeto independente oferece destaque de sintaxe como um complemento para o Z Shell (zsh). No entanto, isso não faz parte do shell.
O PowerShell fornece destaque de sintaxe personalizável na linha de comando por meio do módulo PSReadLine. Este módulo pode ser usado com o PowerShell v3.0 + e está incluído na v5.0. Além disso, ele é carregado por padrão no host de linha de comando "powershell.exe" na v5.0. O PowerShell ISE também inclui destaque de sintaxe na linha de comando, bem como no painel de script. Take Command Console (TCC) oferece destaque de sintaxe no ambiente integrado.
Ajuda sensível ao contexto
4DOS, 4OS2, 4NT / Take Command Console e PowerShell (no PowerShell ISE) procura informações de ajuda contextuais quando F1é pressionado.
Zsh fornece várias formas de ajuda contextual configurável como parte de seu widget run-help , comando _complete_help ou na conclusão de opções para alguns comandos.
Construtor de comandos
Um construtor de comandos é um diálogo guiado que auxilia o usuário no preenchimento de um comando. O PowerShell tem um construtor de comando que está disponível no PowerShell ISE ou que pode ser exibido separadamente por meio do cmdlet Show-Command .
Recursos de programação
Concha | Funções | Manipulação de exceção | Pesquisar e substituir em substituições de variáveis | Aritmética | Ponto flutuante | Biblioteca de funções matemáticas | Matrizes ou listas lineares | Matrizes associativas | Funções lambda | função eval | Geração de número pseudoaleatório | Bytecode |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Bourne shell versão 1977 | Não | Sim (via armadilha ) | Não | Não | Não | Não | Não | Não | Não | sim | Não | Não |
Versão atual do Bourne shell | Sim desde SVR2 | Sim (via armadilha ) | Não | sim | Não | Não | Não | Não | Não | sim | Não | Não |
Shell POSIX | sim | Sim (via armadilha ) | Não | sim | Não | Não | Não | Não | Não | sim | Não | Não |
bash (v4.0) | sim | Sim (via armadilha ) | Sim (por meio da sintaxe $ {// }) | sim | Não | Não | sim | sim | Não | sim | Sim ( $ RANDOM ) | Não |
csh | Não | Não | Sim (via sintaxe $ var: s /// ) | sim | Não | Não | sim | Não | Não | sim | Não | Não |
tcsh | Não | Não | Sim (via sintaxe $ var: s /// ) | sim | Não | Não | sim | Não | Não | sim | Não | Não |
Shell Hamilton C | sim | Não | Sim (via sintaxe $ var: s /// ) | sim | sim | sim | sim | Não | Não | sim | Sim (utilidade aleatória) | Não |
Scsh | sim | ? | Sim (por meio de funções de string e expressões regulares) | ? | ? | ? | sim | ? | sim | sim | Sim (número inteiro aleatório, real aleatório) | Sim (o compilador é a máquina virtual Scheme48, via scshvm ) |
ksh (ksh93t +) | sim | Sim (via armadilha ) | Sim (via sintaxe $ {// } e comandos internos) | sim | sim | sim | sim | sim | Não | sim | Sim ( $ RANDOM ) | Sim (o compilador é chamado de shcomp ) |
pdksh | sim | Sim (via armadilha ) | Não | sim | Não | Não | sim | Não | Não | sim | Sim ( $ RANDOM ) | Não |
zsh | sim | sim | Sim (por meio da sintaxe $ {: s // } e $ {// }) | sim | sim | Sim ( módulo zsh / mathfunc ) | sim | sim | Não | sim | Sim ( $ RANDOM ) | Sim ( comando zcompile integrado ) |
cinza | sim | Sim (via armadilha ) | Não | Sim (desde 1992) | Não | Não | Não | Não | Não | sim | Não | Não |
PCC | Não | ? | Não | Não | ? | ? | Não | Não | Não | Não | Não | Não |
COMMAND.COM | Não | Parcial (somente falha automática (via COMMAND / F (ou / N em algumas versões do DR-DOS)) | Não | Não | Não | Não | Não | Não | Não | Não | Não | Não |
OS / 2 CMD.EXE | Não | Não | Não | ? | Não | Não | ? | Não | Não | Não | Não | Não |
Windows CMD.EXE | Sim (via CALL: rótulo ) | Não | Sim (via SET% varname : sintaxe de expressão ) | Sim (via SET / A ) | Não | Não | Sim (via SET ) | Não | Não | Não | Sim ( % random% ) | Não |
4DOS | sim | Sim (via comando ON , falha automática opcional via 4DOS / F ) | Sim (via função % @ Replace ) | Sim (via SET / A ) | ? | ? | Sim (por meio de intervalos, incluir listas, @ listas de arquivos e comando FOR ) | Não | Não | sim | Sim (função % @ Random [...] ) | Sim (via comando BATCOMP ) |
4OS2 | ? | ? | ? | ? | ? | ? | ? | ? | Não | sim | Sim (função % @ Random [...] ) | ? |
TCC (anteriormente 4NT) | sim | Sim (via ON e vários comandos ... MONITOR ) | Sim (via função % @ Replace ) | Sim (via SET / A ) | ? | ? | Sim (por meio de intervalos, incluir listas, @ listas de arquivos e comando FOR ) | ? | Não | sim | Sim (função % @ Random [...] ) | Sim (via comando BATCOMP ) |
PowerShell | sim | Sim (Tente-Catch-Finalmente) | Sim ( -substituir operador) | sim | sim | [Aula de matemática | sim | sim | sim | sim | sim | Sim automático |
rc | sim | sim | Não | ? | ? | ? | sim | ? | Não | sim | Não | Não |
BeanShell | sim | sim | ? | sim | ? | ? | sim | sim | Não | sim | sim | sim |
VMS DCL | sim | sim | Não | sim | Não | sim, para programas compilados | sim | Não | Não | Não | Não | Não |
peixe | sim | Sim (via armadilha ) | Sim, por meio do comando embutido de string | sim | sim | sim | sim | Não | Não | sim | Sim ( aleatório ) | Não |
Processamento de string e correspondência de nome de arquivo
Concha | Processamento de string | Alternação ( expansão da cinta ) | Correspondência de padrões ( expressões regulares integradas) | Correspondência de padrões ( globbing de nome de arquivo ) | Qualificadores de globbing (geração de nome de arquivo com base em atributos de arquivo) | Globbing recursivo (gerando arquivos de qualquer nível de subdiretórios) |
---|---|---|---|---|---|---|
Bourne shell versão 1977 | ? | Não | Não | Sim ( * , ? , [...] ) | Não | Não |
Versão recente do Bourne Shell | Parcial (remoção de prefixo e sufixo na expansão variável) | Não | Não | Sim ( * , ? , [...] ) | Não | Não |
Shell POSIX | Parcial (remoção de prefixo e sufixo na expansão variável) | Não | Não | Sim ( * , ? , [...] ) | Não | Não |
bash (v4.0) | Parcial (remoção de prefixo e sufixo na expansão variável) | sim | sim | Sim ( * , ? , [...] , {... }) | Não | Sim ( ** / ... ) |
csh | Sim (: se outros operadores de edição) | sim | Não | sim | Não | Não |
tcsh | Sim (: se outros operadores de edição) | sim | sim | sim | Não | Não |
Shell Hamilton C | Sim (: se outros operadores de edição + substr, strlen, strindex, printf, reverse, upper, lower, concat e outras funções embutidas) | sim | Não | sim | Não | Sim (via diretório indefinido "..." curinga) |
Scsh | ? | ? | sim | sim | Não | Não |
ksh (ksh93t +) | Parcial (prefixo, remoção de sufixo e substituição de string na expansão variável) | sim | sim | Sim ( * , ? , [...] ) | Não | Sim (com set -G , sem seguir links simbólicos) |
pdksh | ? | sim | Não | sim | Não | Não |
zsh | Sim (por meio de processamento de variável: por exemplo, extração de substring, várias transformações por meio de expansão de parâmetro) | sim | sim | Sim ( * , ? , [...] , globbing estendido ) | sim | Sim ( ** / ... ou *** / ... para seguir os links simbólicos) |
cinza | ? | ? | Não | sim | Não | Não |
PCC | Não | Não | Não | Não | Não | Não |
COMMAND.COM | Não | Não | Não | Sim ( * , ? ) | Não | Não |
OS / 2 CMD.EXE | Não | Não | Não | Sim ( * , ? ) | Parcial (apenas no comando DIR / A: ... ) | Não |
Windows CMD.EXE | Parcial (apenas através de FOR / F e SET / A ) | Não | Não | Sim ( * , ? ) | Parcial (apenas no comando DIR / A: ... ) | Sim (via comando FOR / R ou, quando disponível, indiretamente via opção de subdiretório / S ) |
4DOS | Sim (por meio de funções variáveis % @ ... [] , processamento de variável de ambiente estendido, vários comandos de string e FOR / F e SET / A ) | Não | Não | Sim ( * , ? , [...] , curingas estendidos , comando pop-up SELECT ) | Sim (via / A: ... atributo e / I "..." opções de descrição e / [S ...] tamanho, / [T ...] hora, / [D ...] data e / [! ...] intervalos de exclusão de arquivo) | Sim (via comando FOR / R ou indiretamente via comando GLOBAL ou, quando disponível, opção de subdiretório / S ) |
4OS2 | ? | Não | Não | ? | ? | ? |
TCC (anteriormente 4NT) | Sim (por meio de funções variáveis % @ ... [] , processamento de variável de ambiente estendido, vários comandos de string e FOR / F e SET / A ) | Não | sim | Sim ( * , ? , [...] , curingas estendidos , comando pop-up SELECT ) | Sim (via / A: ... atributo e / I "..." opções de descrição e / [S ...] tamanho, / [T ...] hora, / [D ...] data, / [ O ...] proprietário e / [! ...] intervalos de exclusão de arquivo) | Sim (via comando FOR / R ou indiretamente via comando GLOBAL ou, quando disponível, opção de subdiretório / S ) |
PowerShell | Sim (Concat / Substring / Inserir / Remover / Substituir, ToLower / ToUpper, Trim / TrimStart / TrimEnd, Compare, Contains / StartsWith / EndWith, Format, IndexOf / LastIndexOf, Pad / PadLeft / PadRight, Split / Join, funções de expressão regular e outras funções de string .NET) | Não | Sim (suporte regex completo) | Sim ( * , ? , [...] ) | ? | ? |
rc | ? | ? | Não | sim | Não | Não |
BeanShell | ? | ? | sim | ? | ? | ? |
VMS DCL | sim | Não | Não | sim | Não | Sim (via [SUBDIR ...] ) |
peixe | Sim (função de string embutida) | sim | sim (por meio de funções integradas de correspondência de string e substituição de string ) | Sim ( * , ? , {... }) | Não | Sim ( ** / ... ) |
Comunicação entre processos
Concha | Tubos | Substituição de comando | Substituição de processo | Subshells | Conexões TCP / UDP como fluxos | Empilhamento de teclas |
---|---|---|---|---|---|---|
Bourne shell | bytes simultâneos | sim | Não | sim | Não | N / D |
Shell POSIX | bytes simultâneos | sim | Não | sim | Não | N / D |
bash (v4.0) | bytes simultâneos | sim | Sim (se o sistema suportar / dev / fd / ⟨n⟩ ou pipes nomeados) | sim | Sim (apenas cliente) | N / D |
csh | bytes simultâneos | sim | Não | sim | Não | N / D |
tcsh | bytes simultâneos | sim | Não | sim | Não | N / D |
Shell Hamilton C | bytes simultâneos | sim | Não | sim | Não | ? |
Scsh | texto | ? | ? | ? | sim | N / D |
ksh (ksh93t +) | bytes (pode conter objetos serializados se imprimir -C for usado) simultâneos | Sim ( $ (...) e $ {<space> ...; }) | Sim (se o sistema suportar / dev / fd / ⟨n⟩ ) | sim | Sim (e suporte SCTP, apenas cliente) | N / D |
pdksh | bytes simultâneos | sim | Não | sim | Não | N / D |
zsh | bytes simultâneos | sim | sim | sim | Sim (cliente e servidor, mas apenas TCP) | N / D |
cinza | bytes simultâneos | sim | Não | sim | Não | N / D |
PCC | Não | Não | Não | Não | Não | Não |
COMMAND.COM | arquivos temporários de texto sequencial | Não | Não | Parcial (somente sob multitarefa DR-DOS via COMMAND.COM / T ) | Não | Não |
OS / 2 CMD.EXE | texto simultâneo | Não | Não | ? | Não | Não |
Windows CMD.EXE | texto simultâneo | Sim (via comando FOR / F ) | Não | Sim (Backtick: ` em FOR / F usebackq ) | Não | Não |
4DOS | arquivos temporários de texto sequencial | Sim (via comando FOR / F ) | ? | Parcial (via % @ EXECSTR [] e % @ EXEC [] , ou via SET / M , ESET / M e UNSET / M e % @ MASTER [...] ) | Não | Sim (via KEYSTACK e KSTACK ) |
4OS2 | texto simultâneo | ? | ? | ? | Não | Sim (via KEYSTACK ) |
TCC (anteriormente 4NT) | texto simultâneo | Sim (via comando FOR / F ) | ? | Parcial (via % @ EXECSTR [] e % @ EXEC [] ) | Sim (via FTP , TFTP , FTPS , SFTP , HTTP , HTTPS e IFTP , apenas cliente) | Sim (via KEYSTACK ) |
PowerShell | objetos simultâneos | sim | Não | sim | sim | ? |
rc | texto simultâneo | sim | Sim (via: <{cmd } se o sistema suportar / dev / fd / ⟨n⟩ ) | sim | Não | ? |
BeanShell | não suportado | ? | ? | ? | sim | ? |
VMS DCL | texto (via comando PIPE ) | sim | Não | Sim (geração) | Sim (somente TCP do servidor) | Não |
peixe | bytes simultâneos | Sim ( ... ) | Não (quebrado) | Não | Não | N / D |
Empilhamento de teclas
Antecipando o que um determinado aplicativo em execução pode aceitar como entrada de teclado, o usuário do shell instrui o shell a gerar uma sequência de pressionamentos de tecla simulados , que o aplicativo interpretará como uma entrada de teclado de um usuário interativo. Ao enviar sequências de pressionamento de tecla, o usuário pode direcionar o aplicativo para executar ações que seriam impossíveis de realizar por meio do redirecionamento de entrada ou exigiriam um usuário interativo. Por exemplo, se um aplicativo atua em pressionamentos de tecla, que não podem ser redirecionados, distingue entre teclas normais e estendidas, esvazia a fila antes de aceitar uma nova entrada na inicialização ou sob certas condições, ou porque não lê nenhuma entrada padrão. O empilhamento de teclas pressionadas normalmente também fornece meios para controlar o tempo de envio de teclas simuladas ou para atrasar novas teclas até que a fila seja liberada etc. Também permite simular teclas que não estão presentes em um teclado (porque as teclas correspondentes não existem fisicamente ou porque um layout de teclado diferente está sendo usado) e, portanto, seria impossível digitar por um usuário.
Recursos de segurança
Concha | Prompt de segurança (senha) | Variáveis / parâmetros criptografados | Senhas de arquivo / diretório | Permissão de execução | Bloqueio de script não confiável | Subconjunto de shell restrito | Subconjunto de dados seguros |
---|---|---|---|---|---|---|---|
Bourne shell | via stty | Não | ? | N / D | Não | sim | Não |
Shell POSIX | via stty | Não | ? | N / D | Não | Não | Não |
bash (v4.0) | leia -s | Não | ? | N / D | Não | sim | Não |
csh | via stty | Não | ? | N / D | Não | sim | Não |
tcsh | via stty | Não | ? | N / D | Não | sim | Não |
Shell Hamilton C | Não | Não | Não | Não | Não | Não | Não |
Scsh | via stty | Não | ? | N / D | Não | Não | Não |
ksh (ksh93t +) | via stty | Não | ? | N / D | Não | sim | Não |
pdksh | via stty | Não | ? | N / D | Não | sim | Não |
zsh | leia -s | Não | ? | N / D | Não | sim | Não |
cinza | via stty | Não | ? | N / D | Não | sim | Não |
PCC | Não | Não | Não | Não | Não | Não | Não |
COMMAND.COM | Parcial (somente sob DR-DOS, solicita a senha se o arquivo / diretório estiver protegido) | Não | Parcial (somente no DR-DOS via \ dirname; dirpwd \ filename; sintaxe filepwd ) | Parcial (somente sob DR-DOS, se os arquivos forem protegidos por senha para permissão de leitura e / ou execução) | Não | Não | Não |
OS / 2 CMD.EXE | Não | Não | Não | Não | Não | Não | Não |
Windows CMD.EXE | Não | Não | Não | Não | Não | Não | Não |
4DOS | Sim (via INPUT / P ou INKEY / P ) | Não | Parcial (somente no DR-DOS via \ dirname ;; dirpwd \ filename ;; sintaxe filepwd ) | Parcial (somente sob DR-DOS, se os arquivos forem protegidos por senha para permissão de leitura e / ou execução) | Não | Não | Não |
4OS2 | ? | Não | Não | Não | Não | Não | Não |
TCC (anteriormente 4NT) | Sim (via INPUT / P , INKEY / P ou QUERYBOX / P ) | Não | Não | Não | Não | Não | Não |
PowerShell | sim | sim | Não | Não | sim | sim | sim |
rc | via stty | Não | ? | N / D | Não | sim | Não |
BeanShell | ? | ? | ? | ? | ? | ? | ? |
VMS DCL | sim | Não | Não | sim | Não | sim | Não |
peixe | leia -s | Não | ? | N / D | Não | Sim (via fish -l ) | ? |
Prompt seguro
Alguns scripts de shell precisam consultar o usuário quanto a informações confidenciais, como senhas , chaves digitais privadas, códigos PIN ou outras informações confidenciais. A entrada sensível não deve ser ecoada de volta para a tela / dispositivo de entrada, onde poderia ser recolhida por pessoas não autorizadas. A representação da memória em texto simples de informações confidenciais também deve ser evitada, pois pode permitir que as informações sejam comprometidas, por exemplo, por meio de arquivos de troca, despejos de memória, etc.
Os shells bash, zsh e PowerShell oferecem isso como um recurso específico. Os shells que não oferecem isso como um recurso específico podem ainda ser capazes de desligar o eco por outros meios. Shells em execução em um sistema operacional Unix / Linux podem usar o comando stty externo para desligar / ligar o eco de caracteres de entrada. Além de não ecoar de volta os caracteres, a opção -AsSecureString do PowerShell também criptografa a entrada caractere por caractere durante o processo de entrada, garantindo que a string nunca seja representada sem criptografia na memória, onde poderia ser comprometida por meio de despejos de memória, varredura, transcrição etc. .
Variáveis / parâmetros criptografados
Se um script lê uma senha em uma variável de ambiente, ela está na memória em texto simples e, portanto, pode ser acessada por meio de um dump de memória. Também está no ambiente de processo, que pode ser acessível por outros processos iniciados pelo script.
O PowerShell pode trabalhar com variáveis / parâmetros de string criptografados. Variáveis criptografadas garantem que os valores não sejam divulgados inadvertidamente por meio de, por exemplo, transcrições, eco, arquivos de log, memória ou despejos de memória ou mesmo varredura de memória maliciosa. O PowerShell também oferece suporte ao salvamento dessas strings criptografadas em arquivos de texto, protegidos por uma chave de propriedade do usuário atual.
Permissão de execução
Alguns sistemas operacionais definem uma permissão de execução que pode ser concedida a usuários / grupos para um arquivo.
Em sistemas Unix, a permissão de execução controla o acesso para invocar o arquivo como um programa e se aplica a executáveis e scripts. Como a permissão é imposta no carregador do programa , nenhuma obrigação é necessária do programa invocador, nem do programa invocado, para impor a permissão de execução - isso também vale para shells e outros programas interpretadores. O comportamento é exigido pela biblioteca POSIX C que é usada para fazer a interface com o kernel. POSIX especifica que a exec
família de funções deve falhar com EACCESS (permissão negada) se o arquivo negar permissão de execução (consulte - Referência de interfaces do sistema, Especificação Única do UNIX , Edição 7 do Grupo Aberto ).
A permissão de execução só se aplica quando o script é executado diretamente. Se um script for chamado como um argumento para o shell de interpretação, ele será executado independentemente de o usuário possuir a permissão de execução para esse script.
Embora o Windows também especifique uma permissão de execução , nenhum dos shells específicos do Windows bloqueia a execução do script se a permissão não tiver sido concedida.
Bloqueio de script não confiável
Alguns shells bloquearão scripts considerados não confiáveis ou se recusarão a executar scripts se exigido por um administrador de sistema.
Restrição de execução da origem do script
O PowerShell pode ser definido para bloquear a execução de scripts que foram marcados como obtidos de uma origem desconhecida / não confiável (por exemplo, a Internet). Os aplicativos voltados para a Internet, como navegadores da web, clientes de mensagens instantâneas, leitores de email, etc. marcam os arquivos baixados da Internet com a zona de origem em um fluxo de dados alternativo que é compreendido pelo PowerShell.
Restrição de script assinado
As políticas de assinatura de script / código podem ser usadas para garantir que um departamento de operações execute apenas scripts / códigos aprovados que foram revisados e assinados por um revisor / aprovador confiável. Os regimes de assinatura também protegem contra adulteração. Se um script é enviado do fornecedor para um cliente, o cliente pode usar a assinatura para garantir que o script não foi adulterado durante o trânsito e que o script realmente se origina do fornecedor e não de um invasor tentando fazer um engenheiro social para um operador executar um script de ataque.
O PowerShell pode ser definido para permitir a execução de scripts bloqueados de outra forma (por exemplo, originados de uma zona não confiável) se o script foi assinado digitalmente usando um certificado digital confiável.
Políticas de execução multinível
Uma empresa pode querer impor restrições de execução globalmente dentro da empresa e / ou certas partes da empresa. Ele pode querer definir uma política para a execução de scripts assinados, mas permitir que certas partes da empresa definam suas próprias políticas para restrições zoneadas.
O PowerShell permite que políticas de bloqueio de script sejam aplicadas em vários níveis: máquina local, usuário atual, etc. Uma política de nível superior substitui uma política de nível inferior, por exemplo, se uma política for definida para a máquina local, ela estará em vigor para todos os usuários da máquina local , somente se for deixado indefinido no nível superior pode ser definido para os níveis inferiores.
Subconjunto de shell restrito
Vários shells podem ser iniciados ou configurados para iniciar em um modo em que apenas um conjunto limitado de comandos e ações está disponível para o usuário. Embora não seja um limite de segurança (o comando que acessa um recurso é bloqueado em vez do recurso), ele é normalmente usado para restringir as ações dos usuários antes de efetuar login.
Um modo restrito é parte da especificação POSIX para shells, e a maioria dos shells Linux / Unix suporta tal modo onde vários dos comandos embutidos são desabilitados e apenas comandos externos de um determinado diretório podem ser chamados.
O PowerShell oferece suporte a modos restritos por meio de arquivos de configuração de sessão ou configurações de sessão. Um arquivo de configuração de sessão pode definir cmdlets visíveis (disponíveis), aliases, funções, provedores de caminho e muito mais.
Subconjunto de dados seguros
Scripts que invocam outros scripts podem ser um risco de segurança, pois podem potencialmente executar código estrangeiro no contexto do usuário que iniciou o script inicial. Os scripts geralmente serão projetados para incluir exclusivamente scripts de locais seguros conhecidos; mas em alguns casos, por exemplo, ao oferecer ao usuário uma maneira de configurar o ambiente ou carregar mensagens localizadas, o script pode precisar incluir outros scripts / arquivos. Uma maneira de lidar com esse risco é o shell oferecer um subconjunto seguro de comandos que podem ser executados por um script incluído.
As seções de dados do PowerShell podem conter constantes e expressões usando um subconjunto restrito de operadores e comandos. As seções de dados do PowerShell são usadas quando, por exemplo, strings localizadas precisam ser lidas de uma fonte externa enquanto protege contra efeitos colaterais indesejados.