fbpx

Comandos Linux – Comando ksh

Comando Linux ksh

comando ksh

Nos sistemas operacionais do tipo Unix, o ksh é o executável do shell Korn, um shell de comando e linguagem de programação .

Descrição

O ksh é uma linguagem de comando e programação que executa comandos lidos em um terminal ou arquivo . rksh é uma versão restrita do interpretador de comandos ksh ; é usado para configurar nomes de login e ambientes de execução cujos recursos são mais controlados que os do shell padrão. Consulte invocação abaixo para obter o significado dos argumentos para o shell.

Definições

No ksh , um metacaractere é um dos seguintes caracteres :

  • ;
  • &
  • (
  • )
  • <
  • >
  • nova linha
  • espaço
  • aba

Um espaço em branco é uma guia ou um espaço. Um identificador é uma sequência de letras, dígitos ou sublinhados começando com uma letra ou sublinhado. Identificadores são usados ​​como componentes de nomes de variáveis . Um vname é uma sequência de um ou mais identificadores separados por um ponto (” . “) E opcionalmente precedidos por um conjunto de dois pontos (” .. “). Os nomes são usados ​​como nomes de função e variável. Uma palavra é uma sequência de caracteres do conjunto de caracteres definido pelo código de idioma atual, excluindo metacaracteres não citados.

Um comando é uma sequência de caracteres na sintaxe da linguagem shell. O shell lê cada comando e executa a ação desejada diretamente ou invocando utilitários separados. Um comando interno é um comando executado pelo próprio shell sem criar um processo separado. Alguns comandos são integrados apenas para conveniência e não são documentados aqui. Os internos que causam efeitos colaterais no ambiente do shell e os internos encontrados antes de realizar uma pesquisa de caminho (consulte a execução abaixo) estão documentados aqui. Por razões históricas, alguns desses embutidos se comportam de maneira diferente de outros embutidos e são chamados de embutidos especiais .

Sintaxe

  ksh [± abcefhikmnoprstuvxBCDP] [ arquivo -R] [ opção o ±] ... [-] [ arg ...]
  rksh [± abcefhikmnoprstuvxBCD] [-R arquivo ] [ opção o ±] ... [-] [ arg ...]

Comandos

Um comando simples é uma lista de atribuições de variáveis ​​(consulte atribuições de variáveis abaixo) ou uma sequência de palavras separadas em branco que podem ser precedidas por uma lista de atribuições de variáveis ​​(consulte o ambiente abaixo). A primeira palavra especifica o nome do comando a ser executado. Exceto conforme especificado abaixo, as palavras restantes são passadas como argumentos para o comando invocado. O nome do comando é passado como argumento 0 (consulte exec ). O valor de um comando simples é seu status de saída; 0-255 se terminar normalmente; 256+ sinalização se terminar de forma anormal (o nome do sinal correspondente ao status de saída pode ser obtido através da opção -l do utilitário interno kill ).

Um pipeline é uma sequência de um ou mais comandos separados por uma barra vertical (” | “). A saída padrão de cada comando, mas o último, é conectado por um tubo à entrada padrão do próximo comando. Cada comando, exceto possivelmente o último, é executado como um processo separado; o shell aguarda o último comando terminar. O status de saída de um pipeline é o status de saída do último comando, a menos que a opção pipefail esteja ativada. Cada pipeline pode ser precedido pelo caractere reservado ” ! “, Que faz com que o status de saída do pipeline se torne 0 se o status de saída do último comando for diferente de zero e 1 se o status de saída do último comando for 0.

Uma lista é uma sequência de um ou mais pipelines separados por ; & , | & , && , ou || e opcionalmente encerrado por ; & ou | & . Destes cinco símbolos ,; & , e | & têm precedência igual, inferior à de && e || . Os símbolos && e || também têm precedência igual. Um ponto-e-vírgula ( ; ) causa a execução sequencial do pipeline anterior; um e comercial ( & ) causa a execução assíncrona do pipeline anterior (ou seja, o shell não espera o término do pipeline). O símbolo | & causa a execução assíncrona do pipeline anterior com um pipe bidirecional estabelecido no shell pai ; a entrada e a saída padrão do pipeline gerado podem ser gravadas e lidas pelo shell pai, aplicando os operadores de redirecionamento <& e > & com arg p aos comandos e usando a opção -p dos comandos internos read and print descrito mais tarde. O símbolo && ( || ) faz com que a lista a seguir seja executada apenas se o pipeline anterior retornar um valor zero (diferente de zero). Uma ou mais novas linhas podem aparecer em uma lista em vez de um ponto e vírgula, para delimitar um comando. O primeiro item do primeiro pipeline de uma lista que é um comando simples, que não começa com um redirecionamento e não ocorre dentro de um tempo , até que ou se a lista possa ser precedida por um ponto e vírgula. Esse ponto-e-vírgula é ignorado, a menos que a opção showme esteja ativada conforme descrito com o conjunto embutido abaixo.

Um comando é um comando simples ou um dos seguintes. Salvo indicação em contrário, o valor retornado por um comando é o do último comando simples executado no comando.

para vname [ na palavra …]; faça a lista ; feitoCada vez que um comando for é executado, vname é definido como a próxima palavra retirada da lista de palavras . Se ” in word …” for omitido, o comando for executará a lista do uma vez para cada parâmetro posicional definido a partir de 1 (consulte a expansão do parâmetro abaixo). A execução termina quando não houver mais palavras na lista.
for (( [ expr1 ] ; [ expr2 ] ; [ expr3 ] )); faça a lista ; feitoA expressão aritmética expr1 é avaliada primeiro (veja avaliação aritmética abaixo). A expressão aritmética expr2 é avaliada repetidamente até avaliar para zero e quando diferente de zero, a lista é executada e a expressão aritmética expr3 avaliada. Se qualquer expressão for omitida, ela se comportará como se tivesse avaliado 1.
selecione vname [na palavra … ]; faça a lista ; prontoUm comando de seleção imprime no erro padrão (descritor de arquivo 2) o conjunto de palavras s, cada uma precedida por um número. Se ” in word …” for omitido, os parâmetros posicionais a partir de 1 serão utilizados (consulte a expansão dos parâmetros abaixo). O prompt do PS3 é impresso e uma linha é lida na entrada padrão. Se essa linha consistir no número de uma das palavras listadas s, o valor da variável vname será definido como a palavra correspondente a esse número. Se esta linha estiver vazia, a lista de seleção será impressa novamente. Caso contrário, o valor da variável vname é definido como nulo . O conteúdo da linha lida da entrada padrão é salvo na variável REPLY. lista é executada para cada seleção até encontrar uma quebra ou final de arquivo . Se a variável REPLY estiver definida como nula pela execução da lista , a lista de seleção será impressa antes de exibir o prompt do PS3 para a próxima seleção.
maiúsculas e minúsculas na lista [[ ( ] padrão [ ? padrão ] …) ;; ] … esacUm comando case executa a lista associada ao primeiro padrão que corresponde à palavra . A forma dos padrões é a mesma usada para a geração de nome de arquivo (consulte a geração de nome de arquivo abaixo). ;; O operador faz com que a execução do caso seja encerrada . Se ; & é usado no lugar de ;; a próxima lista subsequente, se houver, é executada.
se lista ; então lista [ ; lista elif ; então lista ] … [ ; outra lista ] ; filista a seguir se for executada e, se retornar um status de saída zero, a lista a seguir à primeira será executada. Caso contrário, a lista a seguir elif é executada e, se seu valor for zero, a lista a seguir é executada. Na falta de cada lista elif sucessiva, a lista else é executada. Se a lista if tiver um status de saída diferente de zero e não houver outra lista , o comando if retornará um status de saída zero.
enquanto lista ; lista ; feito

até a lista ; faça a lista ; pronto

Um comando while executa repetidamente a lista while e, se o status de saída do último comando na lista for zero, executa a lista do ; caso contrário, o loop termina. Se nenhum comando na lista do for executado, o comando while retornará um status de saída zero; até pode ser usado no lugar de enquanto para negar o teste de finalização do loop.
(( expressão ))expressão é avaliada usando as regras para avaliação aritmética descritas abaixo. Se o valor da expressão aritmética for diferente de zero, o status de saída será 0, caso contrário, o status de saída será 1.
( lista )Execute a lista em um ambiente separado. Observe que, se dois parênteses abertos adjacentes forem necessários para aninhamento, um espaço deverá ser inserido para evitar a avaliação como um comando aritmético, conforme descrito acima.
{ list ;}lista é executada. Observe que, diferentemente dos metacaracteres ( e ) , { e } são palavras reservadas e devem ocorrer no início de uma linha ou após a ; ser reconhecido.
[ expressão ]Avalia a expressão e retorna um status de saída zero quando a expressão é verdadeira. Veja expressões condicionais abaixo para obter uma descrição da expressão .
função varname { lista ;}

varname () { list ;}

Defina uma função que é referenciada por varname . Uma função cujo nome da variável contém a . é chamada de função de disciplina e a parte do nome da var que precede a última . deve se referir a uma variável existente. O corpo da função é a lista de comandos entre { e } . Uma função definida com a sintaxe ” function varname ” também pode ser usada como argumento para o . comando interno especial para obter o comportamento equivalente, como se a sintaxe varname () fosse usada para defini-lo. Veja as funções abaixo.
identificador de espaço para nome { list ;}Define ou usa o identificador do espaço para nome e executa os comandos na lista nesse espaço para nome. Veja os espaços para nome abaixo.
& [ nome [ arg …]]Faz com que os comandos de lista subsequentes terminados por & sejam colocados no nome do conjunto de tarefas em segundo plano. Se o nome for omitido, um pool sem nome padrão será usado. Os comandos em um pool de plano de fundo nomeado podem ser executados remotamente.
tempo [ pipeline ]Se o pipeline for omitido, a hora do usuário e do sistema para o shell atual e os processos filhos concluídos será impressa em erro padrão. Caso contrário, o pipeline é executado e o tempo decorrido, bem como o tempo do usuário e do sistema, são impressos com erro padrão. A variável TIMEFORMAT pode ser definida como uma sequência de formato que especifica como as informações de tempo devem ser exibidas. Veja as variáveis ​​do shell abaixo para obter uma descrição da variável TIMEFORMAT .

As seguintes palavras reservadas são reconhecidas como reservadas somente quando são a primeira palavra de um comando e não são citadas:

  • E se
  • então
  • outro
  • elif
  • fi
  • caso
  • esac
  • para
  • enquanto
  • até
  • Faz
  • feito
  • {
  • }
  • função
  • selecionar
  • Tempo
  • [[
  • ]]
  • !

Atribuições variáveis

Uma ou mais atribuições de variáveis ​​podem iniciar um comando simples ou podem ser argumentos para os comandos internos especiais de conjunto de caracteres, enumeração , exportação ou somente leitura , bem como outros comandos de declaração criados como tipos. A sintaxe para uma atribuição é da seguinte forma:

varname = word

varname [ palavra ] = palavra

Não é permitido espaço entre varname e = ou entre = e word .
varname = (lista de atribuições )Nenhum espaço é permitido entre varname e o = . A variável varname não está definida antes da atribuição. Uma lista de atribuições pode ser uma das seguintes:

palavra …Atribuição de matriz indexada.
palavra ] = palavra …Atribuição de matriz associativa. Se precedido por typeset -a , isso cria uma matriz indexada.
tarefa …Atribuição de variável composta. Isso cria uma variável composta varname com subvariáveis no formato varname.name , em que name é a parte do nome da atribuição. O valor do varname conterá todos os elementos de atribuição. Atribuições adicionais feitas às sub-variáveis ​​de varname também serão exibidas como parte do valor de varname . Se nenhuma designação for especificada, varname será uma variável composta, permitindo a definição de elementos filhos de subsequência.
atribuição de [ opções ] tipográfica …Atribuição de variável aninhada. É possível especificar várias atribuições separando cada uma delas com a ; . O valor anterior não está definido antes da atribuição. Outros comandos de declaração como readonly , enum e outros comandos de declaração podem ser usados ​​no lugar do typeset .
. nome do arquivoInclua os comandos de atribuição contidos no nome do arquivo .

Além disso, um + = pode ser usado no lugar de = para significar adicionar ou acrescentar ao valor anterior. Quando + = é aplicado a um tipo aritmético, a palavra é avaliada como uma expressão aritmética e adicionada ao valor atual. Quando aplicado a uma variável de cadeia , o valor definido pela palavra é anexado ao valor. Para atribuições compostas, o valor anterior não é desmarcado e os novos valores são anexados aos atuais, desde que os tipos sejam compatíveis.

O lado direito de uma atribuição de variável passa por toda a expansão listada abaixo, exceto divisão de palavras, expansão de colchetes e geração de nome de arquivo. Quando o lado esquerdo é uma atribuição, é uma variável composta e o lado direito é o nome de uma variável composta, a variável composta à direita será copiada ou anexada à variável composta à esquerda.

Comentários

Uma palavra que começa com # é considerada o início de um comentário , fazendo com que essa palavra e todos os caracteres a seguir até uma nova linha sejam ignorados.

Alias

A primeira palavra de cada comando é substituída pelo texto de um alias se um alias para essa palavra foi definido. Um nome alternativo consiste em qualquer número de caracteres, excluindo metacaracteres, entre aspas, de expansão de arquivo, de expansão de parâmetro e de substituição de comando, os caracteres / e = . A cadeia de substituição pode conter qualquer script de shell válido, incluindo os metacaracteres listados acima. A primeira palavra de cada comando no texto substituído, exceto aqueles que estão em processo de substituição, será testada quanto a aliases. Se o último caractere do valor do alias estiver em branco, a palavra após o alias também será verificada quanto à substituição do alias. Aliases podem ser usados ​​para redefinir comandos internos, mas não podem ser usados ​​para redefinir as palavras reservadas listadas acima. Os aliases podem ser criados e listados com o comando alias e podem ser removidos com o comando unalias . O alias é executado quando os scripts são lidos, não enquanto são executados. Portanto, para que um alias entre em vigor, o comando de definição de alias deve ser executado antes que o comando que referencia o alias seja lido.

Os seguintes aliases são compilados no shell, mas podem ser desconfigurados ou redefinidos:

  • autoload = ′ typeset -fu ′
  • command = ′ command ′
  • composto = ′ tipo -C ′
  • fc = hist
  • float = ‘tipo -lE’
  • funções = ′ typeset -f ′
  • hash = ‘alias -t -‘
  • história = ′ hist-l ′
  • inteiro = ′ typeset -li ′
  • nameref = ′ typeset -n ′
  • nohup = ′ nohup ′
  • r = ′ hist-s ′
  • redirecionar = ′ comando exec ′
  • source = ′ comando. ′
  • stop = ‘kill -s STOP’
  • suspend = ′ kill -s STOP $$ ′
  • times = ′ {{time;} 2 <& 1;} ′
  • tipo = ′ de onde -v ′

Substituição de til

Após a substituição do alias, cada palavra é verificada para ver se começa com um ” ~ ” não citado. Para substituição de til, word também se refere à parte da palavra da expansão do parâmetro (consulte expansão do parâmetro abaixo). Caso isso aconteça, a palavra até / é verificada para verificar se corresponde a um nome de usuário no banco de dados de senhas. Se uma correspondência for encontrada, o ~ e o nome de login correspondente serão substituídos pelo diretório de login do usuário correspondente. Se nenhuma correspondência for encontrada, o texto original permanecerá inalterado. Um ~ por si só, ou na frente de um / , é substituído por $ HOME . ~ seguido de + ou  é substituído pelo valor de $ PWD e $ OLDPWD, respectivamente.

Além disso, ao expandir uma atribuição de variável, a substituição de til é tentada quando o valor da atribuição começa com a ~ e quando a ~ aparece após a :. : também finaliza um ~ nome de login.

Substituição de comando

A saída padrão de uma lista de comandos entre parênteses precedida por um cifrão (” $ ( lista ) “) ou em um grupo de chaves precedido por um cifrão (” $ { list ;} “) ou em um par de sepulturas acentos (  ) podem ser usados ​​como parte ou toda uma palavra; as novas linhas finais são removidas. No segundo caso, { e } são tratados como palavras reservadas, de modo que { deve ser seguido por um espaço em branco e } deve aparecer no início da linha ou siga a ; . Na terceira forma (obsoleta), a sequência entre aspas é processada para caracteres especiais entre aspas antes que o comando seja executado (consulte a citação abaixo). A substituição do comando ” $ ( arquivo de gato ) ” pode será substituído pelo equivalente, mas mais rápido, ” $ (< file ) “. A substituição do comando $ ( n <#) será expandida para o atual deslocamento de bytes do descritor de arquivo n . Exceto pelo segundo formulário, a lista de comandos é executada em uma subshell para que nenhum efeito colateral seja possível.Para a segunda forma, o final } será reconhecido como uma palavra reservada após qualquer token .

Substituição aritmética

Uma expressão aritmética entre parênteses duplos precedida por um sinal de dólar (” $ (()) “) é substituída pelo valor da expressão aritmética entre parênteses duplos.

Substituição de processo

Cada argumento de comando do formulário <( lista ) ou > ( lista ) executará a lista de processos assincronamente conectada a algum arquivo em / dev / fd se esse diretório existir, ou um diretório temporário . O nome desse arquivo se tornará o argumento para o comando. Se o formulário com > for selecionado, escrever neste arquivo fornecerá entrada para a lista . Se < for usado, o arquivo passado como argumento conterá a saída do processo de lista . Por exemplo,

  colar <(cortar -f1 arquivo1 ) <(cortar -f3 arquivo2 ) |  tee> ( processo1 )> ( processo2 )

corta os campos 1 e 3 dos arquivos file1 e file2 respectivamente, cola os resultados e os envia para os processos process1 e process2 , além de colocá-los na saída padrão. Observe que o arquivo, que é passado como argumento para o comando, é um canal UNIX, portanto, os programas que esperam seguir no arquivo não funcionarão.

A substituição de processo do formulário <( lista ) também pode ser usada com o operador < redirecionamento, que faz com que a saída da lista seja uma entrada padrão ou a entrada para qualquer descritor de arquivo especificado.

Expansão de parâmetros

Um parâmetro é uma variável, um ou mais dígitos ou qualquer um dos caracteres  , @ , # ,?  , $ e ! . Uma variável é denotada por um vname . Para criar uma variável cujo vname contém a . , uma variável cujo vname consiste em tudo antes do último . já deve existir. Uma variável tem um valor e zero ou mais atributos. É possível atribuir valores e atributos às variáveis ​​usando o comando interno especial typeset . Os atributos suportados pelo shell são descritos posteriormente com o comando interno especial typeset . Variáveis ​​exportadas passam valores e atributos para o ambiente.

O shell suporta matrizes indexadas e associativas. Um elemento de uma variável de matriz é referenciado por um subscrito. Um índice subscrito para uma matriz indexada é indicado por uma expressão aritmética (veja avaliação aritmética abaixo) entre a [ e a ] . Para atribuir valores a uma matriz indexada, use ” vname = ( value … ) ” ou ” set -A vname value …”. O valor de todos os subscritos não negativos deve estar no intervalo de 0 a 4.194.303. Um subscrito negativo é tratado como um deslocamento do índice atual máximo +1, para que -1 se refira ao último elemento. Matrizes indexadas podem ser declaradas com a opção -a para digitar . Matrizes indexadas não precisam ser declaradas. Qualquer referência a uma variável com um subscrito válido é legal e uma matriz será criada, se necessário.

Uma matriz associativa é criada com a opção -A para digitar . Um subscrito para uma matriz associativa é indicado por uma cadeia de caracteres entre [ e ] .

Referenciar qualquer matriz sem um subscrito é equivalente a referenciar a matriz com o subscrito 0.

O valor de uma variável pode ser atribuído escrevendo:

  vname = value [ vname = value ] ...

ou

vname [ subscrito ] = valor [ vname [ subscrito ] = valor ] …

Observe que nenhum espaço é permitido antes ou depois do = .

Os atributos atribuídos pelo comando interno especial formatado se aplicam a todos os elementos da matriz. Um elemento da matriz pode ser uma variável simples, uma variável composta ou uma variável da matriz. Um elemento de uma matriz indexada pode ser uma matriz indexada ou uma matriz associativa. Um elemento de uma matriz associativa também pode ser um dos dois. Para se referir a um elemento da matriz que faz parte de um elemento da matriz, concatene o subscrito entre colchetes. Por exemplo, para se referir ao elemento foobar de uma matriz associativa definida como o terceiro elemento da matriz indexada, use $ { vname [3] [foobar]} .

Um nameref é uma variável que é uma referência a outra variável. Um nameref é criado com o atributo -n do tipo de conjunto . O valor da variável no momento do comando typeset se torna a variável que será referenciada sempre que a variável nameref for usada. O nome de um nameref não pode conter um ” . “. Quando um nome de variável ou função contém um ” . ” E a parte do nome até o primeiro ” . ” Corresponde ao nome de um nameref , a variável referida é obtida substituindo a parte nameref pelo nome da variável referenciada pelo nameref . Se um nameref for usado como o índice de um loop for , uma referência de nome será estabelecida para cada item da lista. Um nameref fornece uma maneira conveniente de se referir à variável dentro de uma função cujo nome é passado como argumento para uma função. Por exemplo, se o nome de uma variável for passado como o primeiro argumento para uma função, o comando:

  typeset -n var = $ 1

dentro da função faz com que as referências e atribuições var sejam referências e atribuições à variável cujo nome foi passado para a função.

Se qualquer um dos atributos de ponto flutuante -E , -F ou -X ou o atributo inteiro , -i , for definido para vname , o valor estará sujeito à avaliação aritmética conforme descrito abaixo.

Os parâmetros posicionais (parâmetros indicados por um número) podem receber valores com o comando interno especial set .

O parâmetro $ 0 é definido a partir do argumento zero quando o shell é chamado.

O caractere $ é usado para introduzir parâmetros substituíveis.

$ { parameter }O shell lê todos os caracteres de $ { até a correspondência } como parte da mesma palavra, mesmo que contenha chaves ou metacaracteres. O valor, se houver, do parâmetro é substituído. Os colchetes são necessários quando o parâmetro é seguido por uma letra, dígito ou sublinhado que não deve ser interpretado como parte de seu nome, quando o nome da variável contiver um ” . “. Os colchetes também são necessários quando uma variável é subscrita, a menos que faça parte de uma expressão aritmética ou de uma expressão condicional. Se o parâmetro tiver um ou mais dígitos, será um parâmetro posicional. Um parâmetro posicional de mais de um dígito deve ser colocado entre chaves. Se o parâmetro for  ou @ , todos os parâmetros posicionais, começando com $ 1 , serão substituídos (separados por um caractere separador de campo). Se um array vname com o último subscrito ∗ @ , ou para matrizes de índice no formato sub1 .. sub2 . é usado, então o valor para cada um dos elementos entre sub1 e sub2 inclusive (ou todos os elementos para  e @ ) é substituído, separado pelo primeiro caractere do valor do IFS .
$ {# parameter }Se o parâmetro for  ou @ , o número de parâmetros posicionais será substituído. Caso contrário, o comprimento do valor do parâmetro é substituído.
$ {# vname [ * ] }

$ {# vname [ @ ] }

O número de elementos na matriz vname é substituído.
$ {@ vname }Expande para o nome do tipo (consulte variáveis ​​de tipo abaixo) ou atributos da variável referida por vname .
$ {! vname }Expande para o nome da variável referida por vname . Será vname, exceto quando vname for uma referência de nome.
$ {! vname [ subscrito ] }Expande para o nome do subscrito, a menos que seja subscrito * , @ ou no formato sub1 .. sub2 . Quando subscrito é * , a lista de subscritos de matriz para vname é gerada. Para uma variável que não é uma matriz, o valor é 0 se a variável estiver configurada. Caso contrário, é nulo. Quando subscrito é @ , o mesmo que acima; exceto que, quando usado entre aspas duplas, cada subscrito da matriz gera um argumento separado. Quando subscrito está no formato sub1 .. sub2, ele se expande para a lista de subscritos entre sub1 e sub2 , inclusive, usando as mesmas regras de citação que @ .
$ {! prefixo *}Expande para os nomes das variáveis ​​cujos nomes começam com prefixo .
$ { parâmetro : – palavra }Se o parâmetro estiver definido e não for nulo, substitua seu valor; caso contrário, substitua a palavra .
$ { parâmetro : = palavra }Se o parâmetro não estiver definido ou for nulo, defina-o como word ; o valor do parâmetro é então substituído. Os parâmetros posicionais não podem ser atribuídos dessa maneira.
$ { parâmetro 😕 palavra }Se o parâmetro estiver definido e não for nulo, substitua seu valor; caso contrário, imprima o word e saia do shell (se não for interativo). Se a palavra for omitida, uma mensagem padrão será impressa.
$ { parâmetro : + palavra }Se o parâmetro estiver definido e não for nulo, substitua word ; caso contrário, não substitua nada.

No texto acima, a palavra não é avaliada, a menos que seja usada como a sequência substituída, de modo que, no exemplo a seguir, pwd seja executado apenas se d não estiver definido ou for nulo:

  imprimir $ {d: - $ (pwd)}

Se os dois pontos (” : “) forem omitidos das expressões acima, o shell verificará apenas se o parâmetro está definido ou não.

$ { parâmetro : deslocamento : comprimento }

$ { parâmetro : deslocamento }

Expande para a parte do valor do parâmetro iniciando no caractere (contando de 0) determinado pelo deslocamento expandido como uma expressão aritmética e consistindo no número de caracteres determinados pela expressão aritmética definida pelo comprimento . Na segunda forma, o restante do valor é usado. Um deslocamento negativo conta para trás a partir do final do parâmetro . Observe que um ou mais espaços em branco são necessários na frente de um sinal de menos para impedir que o shell interprete o operador como : – . Se o parâmetro for  ou @ , ou for um nome de matriz indexado por  ou @ , deslocamento e comprimento se referem ao índice da matriz e ao número de elementos, respectivamente. Um deslocamento negativo é obtido em relação a um maior que o maior índice para matrizes indexadas. A ordem para matrizes associadas não é especificada.
$ { parâmetro # padrão }

$ { parâmetro ## padrão }

Se o padrão do shell corresponder ao início do valor do parâmetro , o valor dessa expansão será o valor do parâmetro com a parte correspondente excluída; caso contrário, o valor desse parâmetro será substituído. Na primeira forma, o menor padrão de correspondência é excluído e, na segunda forma, o maior padrão de correspondência é excluído. Quando o parâmetro é @ , * ou uma variável de matriz com o subscrito @ ou * , a operação de substring é aplicada a cada elemento por vez.
$ { parameter % pattern }

$ { parameter %% pattern }

Se o padrão do shell corresponder ao final do valor do parâmetro , o valor dessa expansão será o valor do parâmetro com a parte correspondente excluída; caso contrário, substitua o valor do parâmetro Na primeira forma, o menor padrão de correspondência é excluído e, na segunda forma, o maior padrão de correspondência é excluído. Quando o parâmetro é @ , * ou uma variável de matriz com o subscrito @ ou * , a operação de substring é aplicada a cada elemento por vez.
$ { parâmetro / padrão / string }

$ { parâmetro // padrão / string }

$ { parâmetro / # padrão / string }

$ { parâmetro /% padrão / string }

Expande o parâmetro e substitui a correspondência mais longa do padrão pela sequência especificada. Cada ocorrência de \ n na cadeia de caracteres é substituída pela parte do parâmetro que corresponde ao sub-padrão n- ésimo. Na primeira forma, apenas a primeira ocorrência do padrão é substituída. Na segunda forma, cada correspondência para o padrão é substituída pela sequência especificada. A terceira forma restringe a correspondência de padrões ao início da cadeia, enquanto a quarta forma restringe a correspondência de padrões ao final da cadeia. Quando a string for nula, o padrão será excluído e o / na frente da string poderá ser omitido. Quando o parâmetro é @ , * ou uma variável de matriz com o subscrito @ ou * , a operação de substituição é aplicada a cada elemento por vez. Nesse caso, a parte da string da palavra será reavaliada para cada elemento.

Os seguintes parâmetros são definidos automaticamente pelo shell:

#O número de parâmetros posicionais em decimal.
Opções fornecidas ao shell na chamada ou pelo comando set .
?O valor decimal retornado pelo último comando executado.
$O número do processo desse shell.
_Inicialmente, o valor de _ (um sublinhado) é um nome de caminho absoluto do shell ou script sendo executado conforme passado no ambiente. Posteriormente, é atribuído o último argumento do comando anterior. Este parâmetro não está definido para comandos assíncronos. Este parâmetro também é usado para manter o nome do arquivo MAIL correspondente ao verificar o correio. Ao definir uma variável composta ou um tipo, _ é inicializado como uma referência à variável ou tipo composto. Quando uma função de disciplina é chamada, _ é inicializada como uma referência à variável associada à chamada para esta função. Finalmente, quando _ é usado como o nome da primeira variável de uma definição de tipo, o novo tipo é derivado do tipo da primeira variável. Consulte as variáveis ​​de tipo abaixo.
!A identificação do processo ou o nome do pool e o número do trabalho do último comando em segundo plano chamado ou o trabalho mais recente colocado em segundo plano com o comando interno bg. Os trabalhos em segundo plano iniciados em um pool nomeado estarão no pool de formulários. número em que pool é o nome do pool e number é o número do trabalho nesse pool.
.sh.commandAo processar uma interceptação DEBUG, essa variável contém a linha de comando atual que está prestes a ser executada.
.sh.edcharEssa variável contém o valor do caractere do teclado (ou sequência de caracteres, se o primeiro caractere for um ESC , código ASCII 033) que foi inserido ao processar uma interceptação KEYBD (consulte as combinações de teclas abaixo). Se o valor for alterado como parte da ação de interceptação, o novo valor substituirá a chave (ou sequência de teclas) que causou a interceptação.
.sh.edcolA posição do caractere do cursor no momento da armadilha KEYBD mais recente.
.sh.edmodeO valor é definido como ESC ao processar um trap KEYBD enquanto estiver no modo vi insert. Veja o modo de edição vi abaixo. Caso contrário, .sh.edmode será nulo ao processar uma interceptação KEYBD.
.sh.edtextOs caracteres no buffer de entrada no momento da armadilha KEYBD mais recente. O valor é nulo ao não processar uma interceptação KEYBD.
.sh.fileO nome do caminho do arquivo que contém o comando atual.
.sh.funO nome da função atual que está sendo executada.
.sh.levelDefina a profundidade da função atual. Isso pode ser alterado dentro de uma interceptação DEBUG e definirá o contexto para o nível especificado.
.sh.linenoDefina durante uma interceptação DEBUG o número da linha do chamador de cada função.
.sh.matchUma matriz indexada que armazena as correspondências mais recentes de correspondência e sub-padrão após correspondências de padrões condicionais que correspondem e após expansões de variáveis ​​usando os operadores # , % ou / . O 0-ésimo elemento armazena a correspondência completa e o i -ésimo elemento armazena a i- ésima sub-partida. A variável .sh.match fica desativada quando a variável que foi expandida recebe um novo valor.
.sh.mathUsado para definir funções aritméticas (veja avaliação aritmética abaixo). e armazena a lista de funções aritméticas definidas pelo usuário.
.sh.nameDefina como o nome da variável no momento em que uma função de disciplina é chamada.
.sh.subscriptDefina como o nome do subscrito da variável no momento em que uma função de disciplina é chamada.
.sh.subshellA profundidade atual para subcascas e substituição de comandos.
.sh.valueDefina o valor da variável no momento em que a função de disciplina definir ou acrescentar é invocada. Quando uma função aritmética definida pelo usuário é invocada, o valor de .sh.value é salvo e .sh.value é definido como um ponto flutuante de precisão dupla longo .sh.value é restaurado quando a função retorna.
.sh.versionDefina como um valor que identifique a versão deste shell.
KSH_VERSIONA name reference to .sh.version .
LINENOThe current line number in the script or function being executed.
OLDPWDThe previous working directory set by the cd command.
OPTARGThe value of the last option argument processed by the getopts built-in command.
OPTINDThe index of the last option argument processed by the getopts built-in command.
PPIDThe process number of the parent of the shell.
PWDThe present working directory set by the cd command.
RANDOMEach time this variable is referenced, a random integer, uniformly distributed between 0 and 32767, is generated. The sequence of random numbers can be initialized by assigning a numeric value to RANDOM .
RESPOSTAThis variable is set by the select statement and by the read built-in command when no arguments are supplied.
SECONDSEach time this variable is referenced, the number of seconds since shell invocation is returned. If this variable is assigned a value, then the value returned upon reference will be the value that was assigned plus the number of seconds since the assignment.
SHLVLAn integer variable that is incremented each time the shell is invoked and is exported. If SHLVL is not in the environment when the shell is invoked, it is set to 1.

The following variables are used by the shell:

CDPATHThe search path for the cd command.
COLUNASIf this variable is set, the value is used to define the width of the edit window for the shell edit modes and for printing select lists.
EDITORIf the VISUAL variable is not set, the value of this variable will be checked for the patterns as described with VISUAL below and the corresponding editing option will be turned on.
ENVIf this variable is set, then parameter expansion, command substitution, and arithmetic substitution are performed on the value to generate the pathname of the script that will be executed when the shell is invoked interactively (see invocation below). This file is often used for alias and function definitions. The default value is $HOME/.kshrc . On systems that support a system wide /etc/ksh.kshrc initialization file, if the file name generated by the expansion of ENV begins with /./ or ././ the system wide initialization file will not be executed.
FCEDITObsolete name for the default editor name for the hist command. FCEDIT is not used when HISTEDIT is set.
FIGNOREA pattern that defines the set of file names that will be ignored when performing file name matching.
FPATHThe search path for function definitions. The directories in this path are searched for a file with the same name as the function or command when a function with the -u attribute is referenced and when a command is not found. If an executable file with the name of that command is found, then it is read and executed in the current environment. Unlike PATH , the current directory must be represented explicitly by ” . ” rather than by adjacent ” : ” characters or a beginning or ending ” : “.
HISTCMDNumber of the current command in the history file.
HISTEDITName for the default editor name for the hist command.
HISTFILEIf this variable is set when the shell is invoked, then the value is the pathname of the file that will be used to store the command history (see command re-entry below).
HISTSIZEIf this variable is set when the shell is invoked, then the number of previously entered commands that are accessible by this shell will be greater than or equal to this number. The default is 512.
CASAThe default argument ( home directory ) for the cd command.
IFSInternal field separators (normally space, tab, and newline) that are used to separate the results of command substitution or parameter expansion and to separate fields with the built-in command read. The first character of the IFS variable is used to separate arguments for the ” $* ” substitution (see quoting below). Each single occurrence of an IFS character in the string to be split, that is not in the isspace character class, and any adjacent characters in IFS that are in the isspace character class, delimit a field. One or more characters in IFS that belong to the isspace character class, delimit a field. Also, if the same isspace character appears consecutively inside IFS , this character is treated as if it were not in the isspace class, so that if IFS consists of two tab characters, then two adjacent tab characters delimit a null field.
JOBMAXThis variable defines the maximum number running background jobs that can run at a time. When this limit is reached, the shell will wait for a job to complete before staring a new job.
LANGThis variable determines the locale category for any category not specifically selected with a variable starting with LC_ or LANG .
LC_ALLThis variable overrides the value of the LANG variable and any other LC_ variable.
LC_COLLATEThis variable determines the locale category for character collation information.
LC_CTYPEThis variable determines the locale category for character handling functions. It determines the character classes for pattern matching (see file name generation below).
LC_NUMERICThis variable determines the locale category for the decimal point character.
LINESIf this variable is set, the value is used to determine the column length for printing select lists. Select lists will print vertically until about two-thirds of LINES lines are filled.
ENVIARIf this variable is set to the name of a mail file and the MAILPATH variable is not set, then the shell informs the user of arrival of mail in the specified file.
MAILCHECKThis variable specifies how often (in seconds), the shell will check for changes in the modification time of any of the files specified by the MAILPATH or MAIL variables. The default value is 600 seconds. When the time has elapsed, the shell will check before issuing the next prompt.
MAILPATHA colon (” : “) separated list of file names. If this variable is set, then the shell informs the user of any modifications to the specified files that have occurred in the last MAILCHECK seconds. Each file name can be followed by a ? and a message that will be printed. The message will undergo parameter expansion, command substitution, and arithmetic substitution with the variable $_ defined as the name of the file that has changed. The default message is ” you have mail in $_. “.
CAMINHOThe search path for commands (see execution below). The user may not change PATH if executing under rksh (except in .profile ).
PS1O valor dessa variável é expandido para expansão de parâmetro, substituição de comando e substituição aritmética para definir a cadeia de prompt primária que, por padrão, é ” $ “. O personagem no prompt primário, a cadeia de caracteres é substituída pelo número do comando (consulte a reentrada de comando abaixo). Duas ocorrências sucessivas de irá produzir um single quando a sequência de prompt for impressa.
PS2Sequência de prompt secundária, por padrão ” > “.
PS3Seqüência de prompt de seleção usada em um loop de seleção, por padrão ” #? “.
PS4O valor dessa variável é expandido para avaliação de parâmetro, substituição de comando e substituição aritmética e precede cada linha de um rastreio de execução. Por padrão, o PS4 é ” + “. Além disso, quando o PS4 está desativado, o prompt de rastreamento de execução também é ” + “.
CONCHAO nome do caminho do shell é mantido no ambiente. Na chamada, se o nome base dessa variável for rsh , rksh ou krsh , o shell se tornará restrito. Se for pfsh ou pfksh , o shell se tornará um shell de perfil.
TIMEFORMATO valor desse parâmetro é usado como uma sequência de formato que especifica como as informações de tempo dos pipelines prefixados com a palavra reservada no horário devem ser exibidas. O caractere % introduz uma sequência de formato que é expandida para um valor de tempo ou outras informações. As seqüências de formato e seus significados são os seguintes.

%%Um % literal .
% [ p ] [ l ] RO tempo decorrido em segundos.
% [ p ] [ l ] UO número de segundos de CPU gastos no modo de usuário.
% [ p ] [ l ] SO número de segundos de CPU gastos no modo de sistema.
% PA percentagem da CPU, calculado como ( L + S ) / R .

Os colchetes indicam partes opcionais. Op opcional é um dígito que especifica a precisão, o número de dígitos fracionários após um ponto decimal. Um valor 0 faz com que nenhum ponto decimal ou fração seja gerado. No máximo três casas após o ponto decimal podem ser exibidas; valores de p maiores que 3 são tratados como 3. Se p não for especificado, o valor 3 será usado.

l opcional especifica um formato mais longo, incluindo horas se maior que zero, minutos e segundos no formato HHhMMmSS.FFs . O valor de p determina se a fração está incluída ou não.

Todos os outros caracteres são impressos sem alterações e uma nova linha final é adicionada. Se não estiver definido, o valor padrão, $ ‘\ nreal \ t% 2lR \ nuser \ t% 2lU \ nsys% 2lS ‘, será usado. Se o valor for nulo, nenhuma informação de tempo será exibida.

TMOUTSe definido como um valor maior que zero, TMOUT será o valor de tempo limite padrão para o comando interno de leitura . O comando select composto termina após segundos de TMOUT quando a entrada é de um terminal. Caso contrário, o shell será encerrado se uma linha não for inserida no número prescrito de segundos durante a leitura de um terminal. Observe que o shell pode ser compilado com um limite máximo para esse valor que não pode ser excedido.
VISUALSe o valor dessa variável corresponder ao padrão ” * [ Vv ] [ Ii ] * “, a opção vi será ativada. Se o valor corresponder ao padrão * gmacs * , a opção gmacs estará ativada. Se o valor corresponder ao padrão * macs * , a opção emacs será ativada. O valor de VISUAL substitui o valor de EDITOR .

O shell fornece valores padrão para PATH , PS1 , PS2 , PS3 , PS4 , MAILCHECK , FCEDIT , TMOUT e IFS , enquanto HOME , SHELL , ENV e MAIL não são definidos de todo pelo shell (embora HOME seja definido pelo login ). Em alguns sistemas, MAIL e SHELL também são definidos pelo login .

Divisão de campo

Após a expansão do parâmetro e a substituição do comando, os resultados das substituições são varridos para os caracteres separadores de campo (aqueles encontrados no IFS ) e divididos em campos distintos, onde esses caracteres são encontrados. Campos nulos explícitos ( “” ou  ) são mantidos. Os campos nulos implícitos (aqueles resultantes de parâmetros que não têm valores ou substituições de comando sem saída) são removidos.

Se a opção braceexpand ( -B ) estiver configurada, cada um dos campos resultantes do IFS será verificado para ver se eles contêm um ou mais dos padrões de chaves {*, *} , { l1 .. l2 } , { n1 .. n2 } , { n1 .. n2% fmt } , { n1 .. n2 .. n3 } ou { n1 .. n2 .. n3% fmt } , em que * representa qualquer caractere, l1 , l2 são letras e n1 , n2 , n3 são números assinados e fmt é um formato especificado conforme usado por printf . Em cada caso, os campos são criados adicionando os caracteres antes de { e anexando os caracteres depois de } a cada uma das cadeias geradas pelos caracteres entre { e } . Os campos resultantes são verificados para ver se eles têm algum padrão de colchete.

No primeiro formulário, é criado um campo para cada sequência entre { e, entre , e, e entre e} . A sequência representada por * pode conter correspondência { e } incorporada sem citar. Caso contrário, cada { e } com * deve ser citado.

No formulário de segundos, l1 e l2 devem estar em maiúsculas ou em minúsculas no código C. Nesse caso, um campo é criado para cada caractere de l1 a l2 .

Nos demais formulários, um campo é criado para cada número começando em n1 e continuando até atingir n2, incrementando n1 por n3 . Os casos em que n3 não é especificado se comportam como se n3 onde 1 se n1 <= n2 e -1 caso contrário. Se os formulários que especificam % fmt quaisquer sinalizadores de formato, larguras e precisões puderem ser especificados e fmt puder terminar em qualquer um dos especificadores cdiouxX . Por exemplo, { a , z } {1 .. 5 .. 3% 02d} { b .. c } x se expande para os 8 campos, a01bx , a01cx , a04bx , a04cx , z01bx , z01cx , z04bx e z4cx .

Geração de nome de arquivo

Após a divisão, cada campo é verificado para os caracteres  ,? ( , e [a menos que a opção -f esteja definida. Se um desses caracteres aparecer, a palavra será considerada como padrão. Cada componente do nome do arquivo que contém qualquer caractere padrão é substituído por um conjunto de nomes lexicograficamente classificados que corresponde ao padrão Se nenhum nome de arquivo for encontrado que corresponda ao padrão, esse componente do nome do arquivo permanecerá inalterado, a menos que o padrão seja prefixado com ∼ ( N ) e , nesse caso, ele será removido conforme descrito abaixo. , cada componente de nome de arquivo que corresponda ao padrão definido pelo valor de FIGNORE será ignorado ao gerar os nomes de arquivos correspondentes.Os nomes e também serão ignorados.Se FIGNORE não estiver definido, o caractere no início de cada arquivo O componente name será ignorado, a menos que o primeiro caractere do padrão correspondente a esse componente seja o próprio caractere.Note que, para outros usos do padrão que correspondem a / e ., não são tratados especialmente.

Corresponde a qualquer sequência, incluindo a sequência nula. Quando usado para expansão de nome de arquivo, se a opção globstar estiver ativada , dois adjacent adjacentes por si só corresponderão a todos os arquivos e zero ou mais diretórios e subdiretórios. Se seguido por um / , somente diretórios e subdiretórios corresponderão.
?Corresponde a qualquer caractere único.
[ … ]Corresponde a qualquer um dos caracteres incluídos. Um par de caracteres separados por  corresponde a qualquer caractere lexicamente entre o par, inclusive. Se o primeiro caractere após a abertura [ for a ! ou ^ , qualquer caractere não incluído é correspondido.  pode ser incluído no conjunto de caracteres colocando-o como o primeiro ou o último caractere. Dentro de [ e ] , as classes de caracteres podem ser especificadas com a sintaxe [: class :], em que classe é uma das seguintes classes definidas no padrão ANSI C. Observe que a palavra é equivalente a alnum mais o caractere _ .

  • alnum
  • alfa
  • em branco
  • cntrl
  • dígito
  • gráfico
  • mais baixo
  • impressão
  • pontual
  • espaço
  • superior
  • palavra
  • xdigit

Dentro de [ e ] , uma classe de equivalência pode ser especificada com a sintaxe [= c =] que corresponde a todos os caracteres com o mesmo peso de intercalação primário (conforme definido pelo código de idioma atual) que o caractere c . Dentro de [ e ] , [. símbolo .] corresponde ao símbolo do símbolo de intercalação.

Uma lista de padrões é uma lista de um ou mais padrões separados um do outro com um & ou ? . & significa que todos os padrões devem ser correspondidos, enquanto ? requer que apenas um padrão seja correspondido. Padrões compostos podem ser formados com um ou mais dos seguintes subpadrões:

? ( lista de padrões )Corresponde opcionalmente a qualquer um dos padrões fornecidos.
* ( lista de padrões )Corresponde a zero ou mais ocorrências dos padrões fornecidos.
+ ( lista de padrões )Corresponde a uma ou mais ocorrências dos padrões fornecidos.
{ n } ( lista de padrões )Corresponde a n ocorrências dos padrões fornecidos.
{ m , n } ( lista de padrões )Corresponde de m a n ocorrências dos padrões fornecidos. Se m for omitido, 0 será usado. Se n for omitido, pelo menos m ocorrências serão correspondidas.
@ ( lista de padrões )Corresponde exatamente a um dos padrões fornecidos.
! ( lista de padrões )Corresponde a qualquer coisa, exceto um dos padrões fornecidos.

Por padrão, cada padrão (ou sub-padrão) corresponderá à sequência mais longa possível, consistente com a geração da correspondência geral mais longa. Se mais de uma correspondência for possível, será escolhida a que estiver mais próxima do início da sequência. No entanto, para cada um dos padrões compostos acima, um ”  ” pode ser inserido na frente do ( para fazer com que a correspondência mais curta com a lista de padrões especificada seja usada.

Quando a lista de padrões está contida entre parênteses, o caractere de barra invertida \ é tratado especialmente mesmo quando dentro de uma classe de caracteres. Todos os escapes de caracteres ANSI C são reconhecidos e correspondem ao caractere especificado. Além disso, as seguintes seqüências de escape são reconhecidas:

\ dCorresponde a qualquer caractere na classe de dígitos .
\ DCorresponde a qualquer caractere que não esteja na classe de dígitos .
\ sCorresponde a qualquer caractere na classe espacial .
\ SCorresponde a qualquer caractere que não esteja na classe espacial .
\WCorresponde a qualquer caractere na classe de palavras .
\WCorresponde a qualquer caractere que não esteja na classe de palavras .

Um padrão do formulário % ( par (es) de padrão ) é um subpadrão que pode ser usado para corresponder a expressões de caracteres aninhadas . Cada par de padrões é uma sequência de dois caracteres que não pode conter & ou ? . O primeiro par de padrões especifica os caracteres inicial e final da partida. Cada par de padrões subsequente representa os caracteres inicial e final de um grupo aninhado que serão ignorados ao contar as correspondências de caracteres inicial e final. O comportamento não é especificado quando o primeiro caractere de um par de padrões é alfanumérico, exceto pelo seguinte:

DFaz com que o caractere final encerre a procura por esse padrão sem encontrar uma correspondência.
EFaz com que o caractere final seja interpretado como um caractere de escape.
euFaz com que o caractere final seja interpretado como um caractere de citação, fazendo com que todos os caracteres sejam ignorados ao procurar uma correspondência.
QFaz com que o caractere final seja interpretado como um caractere de citação, fazendo com que todos os caracteres, exceto qualquer caractere de escape, sejam ignorados ao procurar uma correspondência. Portanto, % ({} Q “E \) corresponde aos caracteres que começam em { até que a correspondência } seja encontrada sem contar { ou } que esteja dentro de uma sequência de aspas duplas ou precedida pelo caractere de escape \ . Sem o {} esse padrão corresponde a qualquer string do idioma C.

Cada sub-padrão em um padrão composto é numerado, começando em 1 , pela localização do ( no padrão. A sequência \ n , em que n é um dígito único e \ n vem após o n- ésimo sub-padrão, corresponde a mesma sequência que o próprio sub-padrão.

Finalmente, um padrão pode conter sub-padrões do formulário ~ ( opções : lista-padrão ) , onde opções ou : lista-padrão podem ser omitidas. Ao contrário dos outros padrões compostos, esses sub-padrões não são contados nos sub-padrões numerados. : a lista de padrões deve ser omitida para as opções F , G , N e V abaixo. Se houver opções, ele pode consistir em um ou mais dos seguintes itens:

+Ative as seguintes opções. Esse é o padrão.
Desative as seguintes opções.
EO restante do padrão usa sintaxe de expressão regular estendida, como o comando egrep .
FO restante do padrão usa a sintaxe da expressão fgrep .
GO restante do padrão usa sintaxe básica de expressão regular como o comando grep .
KO restante do padrão usa sintaxe de padrão de shell. Esse é o padrão.
NIsso é ignorado. No entanto, quando é a primeira letra e é usada com a geração do nome do arquivo, e nenhuma correspondência ocorre, o padrão do arquivo se expande para a cadeia vazia.
XO restante do padrão usa sintaxe de expressão regular aumentada como o comando xgrep .
PO restante do padrão usa sintaxe de expressão regular perl . Nem toda sintaxe de expressão regular perl está atualmente implementada.
VO restante do padrão usa a sintaxe de expressão regular do System V.
EuTrate a partida como não diferencia maiúsculas de minúsculas .
gArquive a correspondência mais longa (gananciosa). Esse é o padrão.
euÂncora esquerda do padrão. Esse é o padrão para os padrões de estilo K.
rÂncora direita do padrão. Esse é o padrão para os padrões de estilo K.

Se as opções e : pattern-list forem especificadas, as opções se aplicarão apenas à pattern-list . Caso contrário, essas opções permanecerão em vigor até serem desativadas por um ~ ( … ) subsequente ou no final do sub-padrão que contém ~ ( … ) .

Citação

Cada um dos metacaracteres listados anteriormente (consulte as definições acima) tem um significado especial para o shell e causa o término de uma palavra, a menos que seja citado. Um caractere pode ser citado (isto é, feito para representar a si próprio) precedendo-o com um \ . O par \ nova linha é removido. Todos os caracteres entre um par de aspas simples ( ′ ′ ) que não é precedido por um $ são citados. Uma aspas simples não pode aparecer entre aspas simples. Uma única cadeia de caracteres entre aspas precedida por um $ entre aspas é processada como uma cadeia de caracteres ANSI C, exceto pelo seguinte:

\ 0Faz com que o restante da string seja ignorado.
\ EEquivalente ao caractere de escape ( ASCII 033).
\ eEquivalente ao caractere de escape (ASCII 033).
\ cxExpande para o caractere controle-x .
\ C [ . nome . ]Expande para o nome do elemento de intercalação.

Dentro de aspas duplas ( “” ), ocorrem substituição de parâmetro e comando e \ aspas os caracteres \ ,  ,  e $ . Um $ na frente de uma cadeia de aspas duplas será ignorado no código do idioma” C “ou” POSIX ” , e pode fazer com que a string seja substituída por uma string específica da localidade.O significado de $ ∗ e $@ é idêntico quando não está entre aspas ou quando é usado como um valor de atribuição variável ou como um nome de arquivo. um argumento de comando, ” $ ∗ ” é equivalente a ” $ 1 d $ 2 d …”, em que d é o primeiro caractere da variável IFS , enquanto ” $@ ” é equivalente a ” $ 1 ” ” $ 2 ” .. .. Dentro de aspas graves (  ), \ cita os caracteres \ ,  e $ . Se as aspas graves ocorrerem entre aspas duplas, \ também citará o caractere  .

O significado especial de palavras reservadas ou aliases pode ser removido citando qualquer caractere da palavra reservada. O reconhecimento de nomes de funções ou nomes de comandos internos listados abaixo não pode ser alterado citando-os.

Avaliação aritmética

O shell executa avaliação aritmética para substituição aritmética, para avaliar um comando aritmético, para avaliar um índice subscrito de matriz indexada e para avaliar argumentos para os comandos internos shift e let . As avaliações são realizadas usando aritmética de ponto flutuante de precisão dupla ou ponto flutuante de precisão dupla longa para sistemas que fornecem esse tipo de dados. As constantes de ponto flutuante seguem as convenções de ponto flutuante da linguagem de programação ANSI C. As constantes de ponto flutuante Nan e Inf podem ser usadas para representar “não um número” e infinito, respectivamente. As constantes inteiras seguem as convenções de constantes inteiras da linguagem de programação ANSI C, embora apenas as constantes de caracteres de byte único sejam reconhecidas e as transmissões de caracteres não sejam reconhecidas. Além disso, as constantes podem ter a forma [ base #] n em que base é um número decimal entre dois e sessenta e quatro, representando a base aritmética e n é um número nessa base. Os dígitos acima de 9 são representados pelas letras minúsculas, maiúsculas, @ e _, respectivamente. Para bases menores ou iguais a 36, ​​caracteres maiúsculos e minúsculos podem ser usados ​​de forma intercambiável.

Uma expressão aritmética usa a mesma sintaxe, precedência e associatividade da expressão que a linguagem C. Todos os operadores da linguagem C que se aplicam a quantidades de ponto flutuante podem ser usados. Além disso, o operador ** pode ser usado para exponenciação. Tem precedência mais alta que multiplicação e é deixada associativa. Além disso, quando o valor de uma variável ou subexpressão aritmética pode ser representado como um número inteiro longo, todas as operações aritméticas do número inteiro da linguagem C podem ser executadas. As variáveis ​​podem ser referenciadas pelo nome em uma expressão aritmética sem usar a sintaxe de expansão do parâmetro. Quando uma variável é referenciada, seu valor é avaliado como uma expressão aritmética.

Qualquer uma das seguintes funções da biblioteca matemática que estão na biblioteca matemática C pode ser usada em uma expressão aritmética:

  • abdômen
  • acos
  • acosh
  • como em
  • asinh
  • numa
  • atan2
  • atanh
  • cbrt
  • teto
  • copysign
  • porque
  • cosh
  • erf
  • erfc
  • exp
  • exp2
  • expm1
  • fabs
  • fpclassify
  • fdim
  • finito
  • chão
  • fma
  • fmax
  • fmin
  • fmod
  • hypot
  • ilogb
  • int
  • indefinido
  • sinf
  • isnan
  • é normal
  • issubnormal
  • emitido
  • iszero
  • j0
  • j1
  • JN
  • lgamma
  • registro
  • log10
  • log2
  • logb
  • nearbyint
  • depois
  • nexttoward
  • Pancada
  • restante
  • rint
  • volta
  • scanb
  • signbit
  • pecado
  • sinh
  • sqrt
  • bronzeado
  • tanh
  • tgamma
  • trunc
  • y0
  • y1
  • yn

Além disso, funções aritméticas podem ser definidas como funções shell com uma variante da sintaxe do nome da função:

  função .sh.math.name ident ... { list ;}

em que name é o nome da função usada na expressão aritmética e em cada identificador, ident é uma referência de nome ao argumento de ponto flutuante de precisão dupla longa. O valor de .sh.value quando a função retorna é o valor dessa função. As funções definidas pelo usuário podem receber até 3 argumentos e substituir as funções da biblioteca matemática C.

Uma representação interna de uma variável como um ponto flutuante de precisão dupla pode ser especificada com a opção -E [ n ], -F [ n ] ou -X [ n ] do comando interno especial typeset . A opção -E faz com que a expansão do valor seja representada usando notação científica quando é expandida. O argumento da opção opcional n define o número de algarismos significativos. A opção -F faz com que a expansão seja representada como um número decimal flutuante quando é expandida. A opção -X faz com que a expansão seja representada usando o formato % a definido pela ISO C-99. O argumento da opção opcional n define o número de casas após o ponto decimal (ou raiz ) neste caso.

Uma representação inteira interna de uma variável pode ser especificada com a opção -i [ n ] do comando interno especial typeset . O argumento da opção opcional n especifica uma base aritmética a ser usada ao expandir a variável. Se você não especificar uma base aritmética, a base 10 será usada.

A avaliação aritmética é realizada no valor de cada atribuição a uma variável com o atributo -E , -F , -X ou -i . A atribuição de um número de ponto flutuante a uma variável cujo tipo é um número inteiro faz com que a parte fracionária seja truncada .

Prompting

Quando usado interativamente, o shell solicita o valor de PS1 depois de expandi-lo para expansão de parâmetro, substituição de comando e substituição aritmética, antes de ler um comando. Além disso, cada um ! no prompt é substituído pelo número do comando. !! é necessário colocar ! no prompt. Se a qualquer momento uma nova linha for digitada e mais entradas forem necessárias para concluir um comando, o prompt secundário (ou seja, o valor do PS2 ) será emitido.

Expressões condicionais

Uma expressão condicional é usada com o comando [[ composto para testar atributos de arquivos e comparar seqüências de caracteres. A divisão de campos e a geração de nomes de arquivos não são executadas nas palavras entre [[ e ]] . Cada expressão pode ser construída a partir de uma ou mais das seguintes expressões unárias ou binárias: ” string True “, se a string não for nula.

-um arquivoO mesmo que -e abaixo. Isso é obsoleto.
arquivo -bVerdadeiro , se o arquivo existir e for um arquivo especial de bloco.
arquivo -cVerdadeiro , se o arquivo existir e for um arquivo especial de caractere.
arquivo -dVerdadeiro , se o arquivo existir e for um diretório .
arquivo -eVerdadeiro , se o arquivo existir.
arquivo -fVerdadeiro , se o arquivo existir e for um arquivo comum.
arquivo -gVerdadeiro , se o arquivo existe e seu bit setgid está definido.
arquivo -kVerdadeiro , se o arquivo existir e tiver seu conjunto de bits fixos.
-n stringVerdadeiro , se o comprimento da sequência for diferente de zero.
-o? opçãoVerdadeiro , se opção chamada opção for um nome de opção válido.
-o opçãoVerdadeiro , se a opção nomeada opção estiver ativada.
arquivo -pVerdadeiro , se o arquivo existe e é um arquivo especial quinzena ou um canal .
arquivo -rVerdadeiro , se o arquivo existir e for legível pelo processo atual.
arquivo -sVerdadeiro , se o arquivo existir e tiver tamanho maior que zero.
-t fildesVerdadeiro , se o número do descritor de arquivos fildes estiver aberto e associado a um dispositivo de terminal.
arquivo -uVerdadeiro , se o arquivo existir e tiver seu bit setuid definido.
-v nameVerdadeiro , se o nome da variável for um nome de variável válido e estiver definido.
arquivo -wVerdadeiro , se o arquivo existir e for gravável pelo processo atual.
arquivo -xVerdadeiro , se o arquivo existir e for executável pelo processo atual. Se o arquivo existir e for um diretório, será verdadeiro se o processo atual tiver permissão para pesquisar no diretório.
-z stringVerdadeiro , se o comprimento da string for zero.
Arquivo -LVerdadeiro , se o arquivo existir e for um link simbólico .
arquivo -hVerdadeiro , se o arquivo existir e for um link simbólico.
-N arquivoVerdadeiro , se o arquivo existir e o tempo de modificação for maior que o último tempo de acesso.
-O arquivoVerdadeiro , se o arquivo existir e pertencer ao ID do usuário efetivo desse processo.
Arquivo -GVerdadeiro , se o arquivo existir e seu grupo corresponder ao ID do grupo efetivo desse processo.
-R nomeVerdadeiro se o nome da variável for uma referência de nome.
Arquivo -SVerdadeiro , se o arquivo existir e for um soquete.
file1 -nt file2Verdadeiro , se o arquivo1 existir e o arquivo2 não existir, ou o arquivo1 for mais recente que o arquivo2 .
file1 -ot file2Verdadeiro , se o arquivo2 existir e o arquivo1 não existir, ou o arquivo1 for mais antigo que o arquivo2 .
arquivo1 -ef arquivo2Verdadeiro , se o arquivo1 e o arquivo2 existirem e se referirem ao mesmo arquivo.
string == padrãoVerdadeiro , se a sequência corresponder ao padrão . Qualquer parte do padrão pode ser citada para fazer com que ela corresponda como uma sequência. Com uma correspondência bem-sucedida com um padrão, a variável de matriz .sh.match conterá as correspondências de correspondência e sub-padrão.
string = padrãoO mesmo que == acima, mas é obsoleto.
string ! = padrãoVerdadeiro , se a sequência não corresponder ao padrão . Quando a sequência corresponde ao padrão, a variável de matriz .sh.match conterá as correspondências de correspondência e sub-padrão.
string = aquiVerdadeiro se a string corresponde ao padrão ∼ (E) antes de onde exista uma expressão regular estendida.
string1 < string2Verdadeiro , se string1 vem antes de string2 com base no valor ASCII de seus caracteres.
string1 > string2Verdadeiro , se string1 vem após string2 com base no valor ASCII de seus caracteres.

As seguintes comparações aritméticas obsoletas também são permitidas:

exp1 -eq exp2Verdadeiro , se exp1 for igual a exp2 .
exp1 -ne exp2Verdadeiro , se exp1 não for igual a exp2 .
exp1 -lt exp2Verdadeiro , se exp1 for menor que exp2 .
exp1 -gt exp2Verdadeiro , se exp1 for maior que exp2 .
exp1 -le exp2Verdadeiro , se exp1 for menor ou igual a exp2 .
exp1 -ge exp2Verdadeiro , se exp1 for maior ou igual a exp2 .

Em cada uma das expressões acima, se o arquivo estiver no formato / dev / fd / n , em que n é um número inteiro, o teste será aplicado ao arquivo aberto cujo número do descritor é n .

Uma expressão composta pode ser construída a partir dessas primitivas usando qualquer um dos seguintes, listados em ordem decrescente de precedência.

( expressão )Verdadeiro , se a expressão for verdadeira. Usado para agrupar expressões.
! expressãoVerdadeiro se a expressão for falsa.
expression1 && expression2Verdadeiro , se expressão1 e expressão2 forem verdadeiras.
expression1 ?? expression2Verdadeiro , se expressão1 ou expressão2 for verdadeira.

Entrada / saída

Antes de um comando ser executado, sua entrada e saída podem ser redirecionadas usando uma notação especial interpretada pelo shell. O seguinte pode aparecer em qualquer lugar em um comando simples ou pode preceder ou seguir um comando e não é passado para o comando invocado. A substituição de comandos, a expansão de parâmetros e a substituição aritmética ocorrem antes da palavra ou dígito ser usado, exceto conforme indicado abaixo. A geração do nome do arquivo ocorre apenas se o shell for interativo e o padrão corresponder a um único arquivo. A divisão de campo não é realizada.

Em cada um dos seguintes redirecionamentos, se o arquivo tiver o formato / dev / sctp / host / port , / dev / tcp / host / port ou / dev / udp / host / port , em que host é um nome ou endereço de host, e porta é um serviço fornecido pelo nome ou número de porta inteiro, o redirecionamento tenta fazer uma conexão TCP , SCTP ou UDP ao soquete correspondente.

Nenhum espaço intermediário é permitido entre os caracteres dos operadores de redirecionamento.

< palavraUse a palavra arquivo como entrada padrão (descritor de arquivo 0).
> palavraUse a palavra arquivo como saída padrão (descritor de arquivo 1). Se o arquivo não existir, ele será criado. Se o arquivo existir e a opção noclobber estiver ativada , isso causará um erro; caso contrário, será truncado para comprimento zero.
> palavraO mesmo que > , exceto que ele substitui a opção noclobber .
>; palavraGrava a saída em um arquivo temporário . Se o comando for concluído com êxito, renomeie-o para word , caso contrário, exclua o arquivo temporário. >; A palavra não pode ser usada com o exec incorporado.
>> palavraUse a palavra arquivo como saída padrão. Se o arquivo existir, a saída será anexada a ele (procurando primeiro o final do arquivo ); caso contrário, o arquivo é criado.
<> palavraPalavra de arquivo aberto para leitura e gravação como saída padrão.
<>; palavraO mesmo que <> word, exceto que, se o comando for concluído com êxito, a palavra será truncada no deslocamento na conclusão do comando. <>; A palavra não pode ser usada com o exec incorporado.
<< [  ] palavraA entrada do shell é lida até uma linha que é igual à palavra após a remoção de qualquer citação ou até o final de um arquivo. Nenhuma substituição de parâmetro, substituição de comando, substituição aritmética ou geração de nome de arquivo é executada no word . O documento resultante, chamado documento aqui, torna-se a entrada padrão. Se qualquer caractere da palavra for citado, nenhuma interpretação será colocada sobre os caracteres do documento; caso contrário, a expansão de parâmetro, substituição de comando e substituição aritmética ocorrem, \ newline é ignorado e \ deve ser usado para citar os caracteres \ , $ ,  . Se  é anexado a << , todas as guias principais são removidas da palavra e do documento. Se # for anexado a << , os espaços e tabulações à esquerda serão removidos da primeira linha do documento e até um recuo equivalente será retirado das linhas restantes e da palavra . Presume-se que uma parada de tabulação ocorra a cada 8 colunas para fins de determinação do recuo.
<<< palavraUma forma abreviada de documento here, na qual o word se torna o conteúdo do documento here após a ocorrência de qualquer expansão de parâmetro, substituição de comando e substituição aritmética.
<& dígitoA entrada padrão é duplicada do dígito do descritor de arquivo. Da mesma forma para a saída padrão usando > & dígito .
<& dígito O descritor de arquivo fornecido por dígito é movido para a entrada padrão. Da mesma forma para a saída padrão usando > & dígito  .
<& –A entrada padrão está fechada. Da mesma forma para a saída padrão usando > & – .
<& pA entrada do co-processo é movida para a entrada padrão.
> & pA saída para o co-processo é movida para a saída padrão.
<# (( expr ))Avalie a expressão aritmética expr e posicione o descritor do arquivo 0 para o valor resultante bytes desde o início do arquivo. As variáveis ​​CUR e EOF são avaliadas para o deslocamento atual e o deslocamento no final do arquivo, respectivamente, ao avaliar expr .
> # (( deslocamento ))O mesmo que <# exceto se aplica ao descritor de arquivo 1.
<# padrãoProcura avançar para o início da próxima linha que contém o padrão.
<## padrãoO mesmo que <#, exceto que a parte do arquivo ignorada é copiada para a saída padrão.

Se uma das opções acima for precedida por um dígito, sem espaço em branco, o número do descritor de arquivo referido será o especificado pelo dígito (em vez do padrão 0 ou 1). Se um dos itens acima, além de > & – e os formulários > # e <# , for precedido por { varname } sem espaço intermediário, um número de descritor de arquivo maior que 10 será selecionado pelo shell e armazenado na variável varname . Se > & – ou qualquer um dos formulários > # e <# for precedido por { varname }, o valor de varname definirá o descritor de arquivo para fechar ou posicionar. Por exemplo:

  ... 2> & 1

significa que o descritor de arquivo 2 deve ser aberto para gravação como uma duplicata do descritor de arquivo 1 e

  exec {n} <arquivo

significa abrir arquivo nomeado arquivo para leitura e armazenar o número do descritor de arquivo na variável n .

A ordem na qual os redirecionamentos são especificados é significativa. O shell avalia cada redirecionamento em termos da associação (descritor de arquivo, arquivo) no momento da avaliação. Por exemplo:

  ... 1> fname 2> & 1

primeiro associa o descritor de arquivo 1 ao arquivo fname . Em seguida, associa o descritor de arquivo 2 ao arquivo associado ao descritor de arquivo 1 (ou seja, fname ). Se a ordem dos redirecionamentos for revertida, o descritor de arquivo 2 será associado ao terminal (supondo que o descritor de arquivo 1 tenha sido) e, em seguida, o descritor de arquivo 1 será associado ao arquivo fname .

Se um comando for seguido por & e o controle do trabalho não estiver ativo, a entrada padrão padrão para o comando será o arquivo vazio / dev / null . Caso contrário, o ambiente para a execução de um comando contém os descritores de arquivo do shell de chamada, conforme modificado pelas especificações de entrada / saída.

Meio Ambiente

ambiente é uma lista de pares nome-valor que são passados ​​para um programa executado da mesma maneira que uma lista de argumentos normal. Os nomes devem ser identificadores e os valores são cadeias de caracteres. O shell interage com o ambiente de várias maneiras. Na chamada, o shell varre o ambiente e cria uma variável para cada nome encontrado, fornecendo o valor e os atributos correspondentes e marcando a exportação. Os comandos executados herdam o ambiente. Se o usuário modificar os valores dessas variáveis ​​ou criar novas, usando os comandos export ou typeset -x , eles se tornarão parte do ambiente. O ambiente visto por qualquer comando executado é, portanto, composto por quaisquer pares nome-valor originalmente herdados pelo shell, cujos valores podem ser modificados pelo shell atual, além de quaisquer adições que devem ser observadas nos comandos export ou typeset -x .

O ambiente para qualquer comando simples ou função pode ser aumentado prefixando-o com uma ou mais atribuições de variáveis. Um argumento de atribuição de variável é uma palavra do identificador de formulário = valor . Portanto:

  TERM = 450 cmd args

e

  (export TERM; TERM = 450; cmd args)

são equivalentes (no que diz respeito à execução acima do cmd, exceto pelos comandos internos especiais listados abaixo – aqueles precedidos por uma adaga).

Se a opção -k obsoleta estiver configurada, todos os argumentos de atribuição de variáveis ​​serão colocados no ambiente, mesmo que ocorram após o nome do comando. A seguir, imprime primeiro a = bc e depois c :

  eco a = bc definido -k eco a = bc

Esse recurso é destinado ao uso com scripts escritos para versões anteriores do shell e seu uso em novos scripts é fortemente desencorajado.

Funções

Por razões históricas, há duas maneiras de definir funções, a sintaxe name () e a sintaxe do nome da função, descritas na seção de comandos acima. As funções do shell são lidas e armazenadas internamente. Os nomes alternativos são resolvidos quando a função é lida. Funções são executadas como comandos com os argumentos passados ​​como parâmetros posicionais. Veja a execução abaixo.

As funções definidas pela sintaxe do nome da função e chamadas pelo nome são executadas no mesmo processo que o chamador, compartilham todos os arquivos e apresentam o diretório de trabalho com o chamador. As capturas capturadas pelo chamador são redefinidas para sua ação padrão dentro da função. Uma condição de interceptação que não é capturada ou ignorada pela função faz com que a função seja encerrada e a condição seja passada ao chamador. Um trap no EXIT definido dentro de uma função é executado no ambiente do chamador após a conclusão da função. Normalmente, as variáveis ​​são compartilhadas entre o programa de chamada e a função. No entanto, o comando interno especial formatado usado em uma função define variáveis ​​locais cujo escopo inclui a função atual. Eles podem ser passados ​​para funções que eles chamam na lista de atribuições de variáveis ​​que precedem a chamada ou como argumentos passados ​​como referências de nome. Os erros nas funções retornam o controle ao chamador.

Funções definidas com a sintaxe name () e funções definidas com a sintaxe name da função que são invocadas com o . embutidos especiais são executados no ambiente do chamador e compartilham todas as variáveis ​​e traps com o chamador. Erros nessas execuções de funções fazem com que o script que os contém seja interrompido.

retorno de comando interno especial é usado para retornar de chamadas de função.

Os nomes das funções podem ser listados com a opção -f ou + f do comando interno especial typeset . O texto das funções, quando disponível, também será listado com -f . As funções podem ser indefinidas com a opção -f do comando interno especial não configurado.

Normalmente, as funções são desabilitadas quando o shell executa um script de shell. As funções que precisam ser definidas entre invocações separadas do shell devem ser colocadas em um diretório e a variável FPATH deve conter o nome desse diretório. Eles também podem ser especificados no arquivo ENV .

Funções disciplinares

Cada variável pode ter zero ou mais funções de disciplina associadas a ela. O shell inicialmente entende os nomes das disciplinas obter , definir , acrescentar e desarmar, mas pode ser adicionado ao definir novos tipos. Na maioria dos sistemas, outros podem ser adicionados em tempo de execução por meio da extensão da interface de programação C fornecida pelo utilitário embutido. Se a disciplina get for definida para uma variável, ela será chamada sempre que a variável especificada for referenciada. Se a variável .sh.value receber um valor dentro da função de disciplina, a variável referenciada será avaliada para esse valor. If the set discipline is defined for a variable, it is invoked whenever the given variable is assigned a value. If the append discipline is defined for a variable, it is invoked whenever a value is appended to the given variable. The variable .sh.value is given the value of the variable before invoking the discipline, and the variable will be assigned the value of .sh.value after the discipline completes. If .sh.value is unset inside the discipline, then that value is unchanged. If the unset discipline is defined for a variable, it is invoked whenever the given variable is unset. The variable will not be unset unless it is unset explicitly from in the discipline function.

The variable .sh.name contains the name of the variable for which the discipline function is called, .sh.subscript is the subscript of the variable, and .sh.value will contain the value being assigned inside the set discipline function. The variable _ is a reference to the variable including the subscript if any. For the set discipline, changing .sh.value will change the value that gets assigned. Finally, the expansion ${ var . name } , when name is the name of a discipline, and there is no variable of this name, is equivalent to the command substitution ${ var. name ;} .

Name spaces

Commands and functions that are executed as part of the list of a namespace command that modify variables or create new ones, create a new variable whose name is the name of the name space as given by identifier preceded by ” .. ” When a variable whose name is name is referenced, it is first searched for using .identifier. name . Similarly, a function defined by a command in the namespace list is created using the name space name preceded by a ” . “.

When the list of a namespace command contains a namespace command, the names of variables and functions that are created consist of the variable or function name preceded by the list of identifiers each preceded by ” . “.

Outside of a name space, a variable or function created inside a name space can be referenced by preceding it with the name space name .

By default, variables staring with .sh are in the sh name space.

Type variables

Typed variables provide a way to create data structure and objects. A type can be defined either by a shared library, by the enum built-in command described below, or by using the new -T option of the typeset built-in command. With the -T option of typeset, the type name, specified as an option argument to -T , is set with a compound variable assignment that defines the type. Function definitions can appear inside the compound variable assignment and these become discipline functions for this type and can be invoked or redefined by each instance of the type. The function name create is treated specially. It is invoked for each instance of the type that is created but is not inherited and cannot be redefined for each instance.

When a type is defined a special built-in command of that name is added. These built-ins are declaration commands and follow the same expansion rules as all the special built-in commands defined below that are preceded by ††. These commands can subsequently be used inside further type definitions. The man page for these commands can be generated by using the –man option or any of the other  options described with getopts . The -r , -a , -A , -h , and -S options of typeset are permitted with each of these new built-ins.

An instance of a type is created by invoking the type name followed by one or more instance names. Each instance of the type is initialized with a copy of the sub-variables except for sub-variables that are defined with the -S option. Variables defined with the -S are shared by all instances of the type. Each instance can change the value of any sub-variable and can also define new discipline functions of the same names as those defined by the type definition as well as any standard discipline names. No additional sub-variables can be defined for any instance.

When defining a type, if the value of a sub-variable is not set and the -r attribute is specified, it causes the sub-variable to be a required sub-variable. Whenever an instance of a type is created, all required sub-variables must be specified. These sub-variables become readonly in each instance.

When unset is invoked on a sub-variable within a type, and the -r attribute has not been specified for this field, the value is reset to the default value associative with the type. Invoking unset on a type instance not contained within another type deletes all sub-variables and the variable itself.

A type definition can be derived from another type definition by defining the first sub-variable name as _ and defining its type as the base type. Any remaining definitions will be additions and modifications that apply to the new type. If the new type name is the same is that of the base type, the type will be replaced and the original type will no longer be accessible.

The typeset command with the -T and no option argument or operands will write all the type definitions to standard output in a form that can be read in to create all they types.

Empregos

If the monitor option of the set command is turned on, an interactive shell associates a job with each pipeline. It keeps a table of current jobs, printed by the jobs command, and assigns them small integer numbers. When a job is started asynchronously with & , the shell prints a line which looks like:

 [1] 1234

indicating that the job which was started asynchronously was job number 1 and had one (top-level) process, whose process id was 1234 .

This paragraph and the next require features that are not in all versions of UNIX and may not apply. If you are running a job and wish to do something else, you may hit the key ^Z (control-Z) which sends a STOP signal to the current job. The shell will then normally indicate that the job was “Stopped,” and print another prompt. You can then manipulate the state of this job, putting it in the background with the bg command, or run some other commands and then eventually bring the job back into the foreground with the foreground command fg . A ^Z takes effect immediately and is like an interrupt in that pending output and unread input are discarded when it is typed.

A job being run in the background will stop if it tries to read from the terminal. Background jobs are normally allowed to produce output, but this can be disabled by giving the command stty tostop . If you set this tty option , then background jobs will stop when they try to produce output like they do when they try to read input.

A job pool is a collection of jobs started with list & associated with a name.

There are several ways to refer to jobs in the shell. A job can be referred to by the process id of any process of the job or by one of the following:

% numberThe job with the given number.
piscinaAll the jobs in the job pool named by pool .
piscina . númeroThe job number number in the job pool named by pool .
% stringAny job whose command line begins with string .
%? cordaAny job whose command line contains string.
%%Current job.
%+Equivalent to %% .
%-Previous job. Also, unless noted otherwise, wherever a job can be specified, the name of a background job pool can be used to represent all the jobs in that pool.

The shell learns immediately whenever a process changes state. It normally informs you whenever a job becomes blocked so that no further progress is possible, but only before it prints a prompt. This is done so that it does not otherwise disturb your work. The notify option of the set command causes the shell to print these job change messages as soon as they occur.

When the monitor option is on, each background job that completes triggers any trap set for CHLD .

When you try to leave the shell while jobs are running or stopped, you will be warned that ‘You have stopped(running) jobs.’ You may use the jobs command to see what they are. If you immediately try to exit again, the shell will not warn you a second time, and the stopped jobs will be terminated. When a login shell receives a HUP signal, it sends a HUP signal to each job that has not been disowned with the disown built-in command described below.

Signals

The INT and QUIT signals for an invoked command are ignored if the command is followed by & and the monitor option is not active. Otherwise, signals have the values inherited by the shell from its parent (but see also the trap built-in command below).

Execução

Each time a command is read, the above substitutions are carried out. If the command name matches one of the Special Built-in Commands listed below, it is executed in the current shell process. Next, the command name is checked to see if it matches a user defined function. If it does, the positional parameters are saved and then reset to the arguments of the function call. A function is also executed in the current shell process. When the function completes or issues a return , the positional parameter list is restored. For functions defined with the function name syntax, any trap set on EXIT in the function is executed. The exit value of a function is the value of the last command executed. If a command name is not a special built-in command or a user defined function, but it is one of the built-in commands listed below, it is executed in the current shell process.

The shell variables PATH followed by the variable FPATH defines the list of directories to search for the command name. Alternative directory names are separated by a colon ( : ). The default path is /bin:/usr/bin: (specifying /bin , /usr/bin , and the current directory in that order). The current directory can be specified by two or more adjacent colons, or by a colon at the beginning or end of the path list. If the command name contains a / , then the search path is not used. Otherwise, each directory in the list of directories defined by PATH and FPATH is checked in order. If the directory being searched is contained in FPATH and contains a file whose name matches the command being searched, then this file is loaded into the current shell environment as if it were the argument to the . command except that only preset aliases are expanded, and a function of the given name is executed as described above.

If this directory is not in FPATH , the shell first determines whether there is a built-in version of a command corresponding to a given pathname and if so it is invoked in the current process. If no built-in is found, the shell checks for a file named .paths in this directory. If found and there is a line of the form FPATH= path where path names an existing directory then that directory is searched after immediately after the current directory as if it were found in the FPATH variable. If path does not begin with / , it is checked for relative to the directory being searched.

The .paths file is then checked for a line of the form PLUGIN_LIB= libname “[ : libname ] …”. Each library named by libname will be searched for as if it were an option argument to builtin -f , and if it contains a built-in of the specified name this will be executed instead of a command by this name. Any built-in loaded from a library found this way will be associated with the directory containing the .paths file so it will only execute if not found in an earlier directory.

Finally, the directory will be checked for a file of the given name. If the file has execute permission but is not an a.out file, it is assumed to be a file containing shell commands. A separate shell is spawned to read it. All non-exported variables are removed in this case. If the shell command file doesn’t have read permission, or if the setuid and/or setgid bits are set on the file, then the shell executes an agent whose job it is to set up the permissions and execute the shell with the shell command file passed down as an open file. If the .paths contains a line of the form name= value in the first or second line, then the environment variable name is modified by prepending the directory specified by value to the directory list . If value is not an absolute directory, then it specifies a directory relative to the directory that the executable was found. If the environment variable name does not already exist it will be added to the environment list for the specified command. A parenthesized command is executed in a sub-shell without removing non-exported variables.

Command re-entry

The text of the last HISTSIZE (default 512 ) commands entered from a terminal device is saved in a history file. The file $HOME/.sh_history is used if the HISTFILE variable is not set or if the file it names is not writable. A shell can access the commands of all interactive shells which use the same named HISTFILE . The built-in command hist is used to list or edit a portion of this file. The portion of the file to be edited or listed can be selected by number or by giving the first character or characters of the command. A single command or range of commands can be specified. If you do not specify an editor program as an argument to hist then the value of the variable HISTEDIT is used. If HISTEDIT is unset, the obsolete variable FCEDIT is used. If FCEDIT is not defined, then /bin/ed is used. The edited command(s) is printed and re-executed upon leaving the editor unless you quit without writing. The -s option (and in obsolete versions, the editor name  ) is used to skip the editing phase and to re-execute the command. In this case, a substitution parameter of the form old = new can be used to modify the command before execution. For example, with the preset alias r , which is aliased to ′ hist -s ′, typing ‘ r bad=good c ‘ will re-execute the most recent command which starts with the letter c , replacing the first occurrence of the string bad with the string good .

In-line editing options

Normally, each command line entered from a terminal device is typed followed by a newline (‘RETURN’ or ‘LINE FEED’). If either the emacs , gmacs , or vi option is active, the user can edit the command line. To be in either of these edit modes set the corresponding option. An editing option is automatically selected each time the VISUAL or EDITOR variable is assigned a value ending in either of these option names.

The editing features require that the user’s terminal accept ‘RETURN’ as carriage return without line feed and that a space (‘ ‘) must overwrite the current character on the screen.

Unless the multiline option is on, the editing modes implement a concept where the user is looking through a window at the current line. The window width is the value of COLUMNS if it is defined, otherwise 80. If the window width is too small to display the prompt and leave at least 8 columns to enter input, the prompt is truncated from the left. If the line is longer than the window width minus two, a mark is displayed at the end of the window to notify the user. As the cursor moves and reaches the window boundaries, the window will be centered about the cursor. The mark is a > ( < , * ) if the line extends on the right (left, both) side(s) of the window.

Os comandos de pesquisa em cada modo de edição fornecem acesso ao arquivo de histórico. Somente cadeias são correspondidas, não padrões, embora um ^ inicial na cadeia restrinja a correspondência para começar no primeiro caractere da linha. Cada um dos modos de edição possui uma operação para listar os arquivos ou comandos que correspondem a uma palavra parcialmente inserida. Quando aplicado à primeira palavra da linha ou à primeira palavra após a ; , ? , & , ou ( , e a palavra não começa com ~ ou contém a / , a lista de aliases, funções e comandos executáveis ​​definidos pelo PATHA variável que poderia corresponder à palavra parcial é exibida. Caso contrário, a lista de arquivos que correspondem à palavra especificada é exibida. Se a palavra parcialmente inserida não contiver caracteres de expansão de arquivo, um * será acrescentado antes de gerar essas listas. Depois de exibir a lista gerada, a linha de entrada é redesenhada. Essas operações são chamadas de listagem de nomes de comandos e de nomes de arquivos , respectivamente. Existem operações adicionais, conhecidas como conclusão do nome do comando e conclusão do nome do arquivo , que calculam a lista de comandos ou arquivos correspondentes, mas em vez de imprimir a lista, substitua a palavra atual por uma correspondência completa ou parcial. Para a conclusão do nome do arquivo, se a correspondência for exclusiva, um /será anexado se o arquivo for um diretório e um espaço for acrescentado se o arquivo não for um diretório. Caso contrário, o prefixo comum mais longo para todos os arquivos correspondentes substituirá a palavra. Para a conclusão do nome do comando, apenas a parte dos nomes dos arquivos após o último / é usada para encontrar o prefixo de comando mais longo. Se apenas um nome único corresponder a esse prefixo, a palavra será substituída pelo nome do comando seguido por um espaço. Ao usar uma guia para conclusão que não produz uma correspondência única, uma guia subsequente fornecerá uma lista numerada de alternativas correspondentes. Uma seleção específica pode ser feita digitando o número da seleção seguido por uma guia.

Combinações de teclas

A interceptação KEYBD pode ser usada para interceptar chaves à medida que são digitadas e alterar os caracteres que são realmente vistos pelo shell. Essa interceptação é executada após a inserção de cada caractere (ou sequência de caracteres quando o primeiro caractere é ESC) durante a leitura de um terminal. A variável .sh.edchar contém o caractere ou sequência de caracteres que gerou a interceptação. Alterar o valor de .sh.edchar na ação de interceptação faz com que o shell se comporte como se o novo valor tivesse sido inserido no teclado em vez do valor original.

A variável .sh.edcol é definida como o número da coluna de entrada do cursor no momento da entrada. A variável .sh.edmode é configurada como ESC quando está no modo vi insert (veja abaixo) e é nula caso contrário. Anexando $ {. Sh.editmode} a um valor atribuído a .sh.edchar , fará com que o shell mude para o modo de controle se ainda não estiver nesse modo.

Essa interceptação não é chamada para caracteres inseridos como argumentos para editar diretivas ou durante a leitura de entrada para uma pesquisa de caracteres.

Modo de edição do Emacs

Este modo é ativado ativando a opção emacs ou gmacs . A única diferença entre esses dois modos é a maneira como eles lidam com ^ T. Para editar, o usuário move o cursor para o ponto que precisa de correção e, em seguida, insere ou exclui caracteres ou palavras, conforme necessário. Todos os comandos de edição são caracteres de controle ou seqüências de escape. A notação para caracteres de controle é acento circunflexo ( ^ ) seguido pelo caractere. Por exemplo, ^ F é a notação para o controle-F . Para entrar, pressione ‘ f ‘ enquanto mantém pressionada a tecla ‘ Ctrl ‘ (controle). A tecla ‘ Shift ‘ não é pressionada. A notação ^? indica a tecla Del (excluir).

A notação para seqüências de escape é M- seguida por um caractere. Por exemplo, M – f (pronunciado Meta f) é inserido pressionando ESC (ASCII 033) seguido de ‘ f ‘. M – F seria a notação para ESC seguida de ‘ Shift ‘ (capital) ‘ F ‘.)

Todos os comandos de edição operam em qualquer lugar da linha (não apenas no início). Nem a tecla ‘RETURN’ nem a ‘LINE FEED’ são inseridas após os comandos de edição, exceto quando indicado.

^ FMova o cursor para frente (direita) um caractere.
M – [CMova o cursor para frente (direita) um caractere.
M – fMova o cursor para frente uma palavra. A idéia de uma palavra do editor do emacs é uma sequência de caracteres que consiste apenas em letras, dígitos e sublinhados.
^ BMova o cursor para trás (esquerda) um caractere.
M – [DMova o cursor para trás (esquerda) um caractere.
M – bMova o cursor para trás uma palavra.
^ AMova o cursor para o início da linha.
M – [HMova o cursor para o início da linha.
^ EMova o cursor para o final da linha.
M – [YMova o cursor para o final da linha.
^] charMova o cursor para frente até o caractere na linha atual.
M- ^] charMova o cursor para trás até o caractere na linha atual.
^ X ^ XTroque o cursor e marque.
apagarCaractere de apagamento definido pelo usuário, conforme definido pelo comando stty , geralmente ^ H ou # . Excluir caractere anterior.
proximaO próximo caractere literal definido pelo usuário, conforme definido pelo comando stty , ou ^ V, se não definido. Remove os recursos de edição do próximo personagem (se houver).
^ DExcluir caractere atual.
M – dExcluir palavra atual.
M – ^ HMeta – backspace ) Exclua a palavra anterior.
M – hApague a palavra anterior.
M – ^?Meta – DEL ) Exclua a palavra anterior (se o caractere de interrupção for ^? ( DEL , o padrão), esse comando não funcionará).
^ TTransponha o caractere atual com o caractere anterior e avance o cursor no modo emacs . Transponha dois caracteres anteriores no modo gmacs .
^ CColoque em maiúscula o caractere atual.
McColoque em maiúscula a palavra atual.
M – lAltere a palavra atual para minúscula.
^ KExclua do cursor até o final da linha. Se precedido por um parâmetro numérico cujo valor é menor que a posição atual do cursor, exclua da posição especificada até o cursor. Se precedido por um parâmetro numérico cujo valor é maior que a posição atual do cursor, exclua do cursor até a posição especificada do cursor.
^ WMate do cursor até a marca.
M – pEmpurre a região do cursor para a marca na pilha.
mateCaractere kill definido pelo usuário, conforme definido pelo comando stty , geralmente ^ G ou @ . Mate a linha atual inteira.

Se dois caracteres matados forem inseridos em sucessão, todos os caracteres matados a partir de então causarão um avanço de linha.

^ YRestaure o último item removido da linha. Arranque o item de volta à linha.
^ LAlimentação de linha e impressão da linha atual.
M – ^ LLimpe a tela.
^ @(Caractere nulo) Defina a marca.
M – espaço(Meta espaço) Defina a marca.
^ J(Nova linha) Execute a linha atual.
^ M(Retorno) Execute a linha atual.
eofO caractere de fim de arquivo , normalmente ^ D , é processado como um final de arquivo apenas se a linha atual for nula.
^ PBusque o comando anterior. Cada vez que P é inserido, o comando anterior é acessado no tempo anterior. Retrocede uma linha quando não estiver na primeira linha de um comando de várias linhas.
M – [ASe o cursor estiver no final da linha, será equivalente a ^ R com a sequência definida para o conteúdo da linha atual. Caso contrário, é equivalente a ^ P.
M – <Busque a linha do histórico menos recente (mais antiga).
M – >Busque a linha de história mais recente (mais nova).
^ NBusque a próxima linha de comando. Cada vez que N é inserido, a próxima linha de comando para a frente é acessada.
M – [BEquivalente a ^ N.
^ R stringInverta o histórico de pesquisa para uma linha de comando anterior contendo string . Se um parâmetro de zero for fornecido, a pesquisa será encaminhada. sequência é finalizada com um ‘RETURN’ ou ‘NEW LINE’. Se a sequência for precedida por um ^ , a linha correspondente deverá começar com a sequência . Se a string for omitida, a próxima linha de comando que contém a string mais recente será acessada. Nesse caso, um parâmetro zero reverte a direção da pesquisa.
^ OOperar – Execute a linha atual e busque a próxima linha em relação à linha atual no arquivo de histórico.
Dígitos M(Escape) Defina o parâmetro numérico, os dígitos são tomados como parâmetro para o próximo comando. Os comandos que aceitam um parâmetro são ^ F , ^ B , apagar , ^ C , ^ D , ^ K , ^ R , ^ P , ^ N , ^] , M – . M – ^] , M – _ , M – = , M – b , M – c , M – d , M – f , M – h , M – l e M – ^ H.
M – letraTecla programável – Sua lista de alias é pesquisada por um nome alternativo pelo nome _ letra e, se um alias desse nome for definido, seu valor será inserido na fila de entrada. A carta não deve ser uma das meta-funções acima.
M – [ letraTecla de função – Sua lista de alias é pesquisada por um nome alternativo pelo nome __ letra e, se um alias desse nome for definido, seu valor será inserido na fila de entrada. Isso pode ser usado para programar teclas de função em muitos terminais.
M – .A última palavra do comando anterior é inserida na linha. Se precedido por um parâmetro numérico, o valor desse parâmetro determina qual palavra inserir, em vez da última palavra.
M – _O mesmo que M – ..
M – *Tente gerar o nome do arquivo na palavra atual. Um asterisco é anexado se a palavra não corresponder a nenhum arquivo ou contiver caracteres de padrão especiais.
M – ESCConclusão do nome do comando ou arquivo, conforme descrito acima.
^ AbaTenta concluir o comando ou nome do arquivo conforme descrito acima. Se ocorrer uma conclusão parcial, repetir isso se comportará como se M – = tivesse sido inserido. Se nenhuma correspondência for encontrada ou inserida após o espaço, uma guia será inserida.
M – =Se não for precedido por um parâmetro numérico, ele gera a lista de comandos ou nomes de arquivos correspondentes, conforme descrito acima. Caso contrário, a palavra sob o cursor será substituída pelo item correspondente ao valor do parâmetro numérico da lista de comando ou arquivo gerada mais recentemente. Se o cursor não estiver em uma palavra, ele será inserido.
^ UMultiplique o parâmetro do próximo comando por 4.
\Escapar do próximo personagem. A edição de caracteres, os caracteres de exclusão , interrupção e interrupção do usuário (normalmente ^? ) Podem ser inseridos em uma linha de comando ou em uma sequência de pesquisa, se precedida por um \ . \ remove os recursos de edição do próximo caractere (se houver).
M – ^ VExibir versão do shell.
M – #Se a linha não começar com um # , um # é inserido no início da linha e após cada nova linha, e a linha é inserida. Isso faz com que um comentário seja inserido no arquivo de histórico. Se a linha começar com um # , o # é excluído e um # após cada nova linha também é excluída.

Vi modo de edição

Existem dois modos de digitação. Inicialmente, quando você digita um comando, está no modo de entrada. Para editar, o usuário entra no modo de controle digitando ESC (código ASCII 033) e move o cursor para o ponto que precisa de correção e, em seguida, insere ou exclui caracteres ou palavras, conforme necessário. A maioria dos comandos de controle aceita uma contagem de repetição opcional antes do comando.

Quando no modo vi , na maioria dos sistemas, o processamento canônico é ativado inicialmente e o comando será repetido novamente se a velocidade for 1200 baud ou superior e contiver caracteres de controle ou menos de um segundo após a impressão do prompt. O caractere ESC encerra o processamento canônico pelo restante do comando e o usuário pode modificar a linha de comando. Esse esquema tem as vantagens do processamento canônico com o eco de digitação antecipada do modo bruto.

Se a opção viraw também estiver definida, o terminal sempre terá o processamento canônico desativado. Esse modo está implícito para sistemas que não suportam dois delimitadores alternativos de fim de linha e pode ser útil para determinados terminais.

Por padrão, o editor é colocado no modo de edição “Entrada”.

Comandos de edição de entrada:

apagarCaractere de apagamento definido pelo usuário, conforme definido pelo comando stty , geralmente ^ H ou # . Excluir caractere anterior.
^ WExclua a palavra separada em branco anterior. Em alguns sistemas, a opção viraw pode ser necessária para que isso funcione.
eofComo o primeiro caractere da linha faz com que o shell termine, a menos que a opção ignoreeof esteja definida. Caso contrário, esse caractere será ignorado.
proximaO próximo caractere literal definido pelo usuário, conforme definido pelo stty ou ^ V, se não definido. Remove os recursos de edição do próximo personagem (se houver). Em alguns sistemas, a opção viraw pode ser necessária para que isso funcione.
\Escapar do próximo apagar ou matar o personagem.
^ AbaTenta concluir o comando ou nome do arquivo conforme descrito acima e retorna ao modo de entrada. Se ocorrer uma conclusão parcial, repetir isso se comportará como se = tivesse sido inserido no modo de controle. Se nenhuma correspondência for encontrada ou inserida após o espaço, uma guia será inserida.

Comandos de edição de movimento (esses comandos movem o cursor):

contagem ] lCursor para a frente (direita) um caractere.
contagem ] [CCursor para a frente (direita) um caractere.
contagem ] wO cursor encaminha uma palavra alfanumérica.
contagem ] WCursor para o início da próxima palavra que segue um espaço em branco.
contagem ] eCursor para o final da palavra.
contagem ] ECursor para o final da atual palavra delimitada em branco.
contagem ] hCursor para trás (esquerda) um caractere.
contagem ] [DCursor para trás (esquerda) um caractere.
contagem ] bCursor para trás uma palavra.
contagem ] BCursor da palavra separada em branco anterior.
contagem ] ?Contagem do cursor para a coluna.
contagem ] f cEncontre o próximo caractere c na linha atual.
contagem ] F cEncontre o caractere anterior c na linha atual.
contagem ] t cEquivalente a f seguido de h .
contagem ] T cEquivalente a F seguido de l .
contagem ] ;Repete o tempo de contagem , o último comando de localização de um único caractere ( f , F , t ou T ).
contagem ] ,Inverte o último caractere único encontrar tempos de contagem de comandos.
0 0Cursor para o início da linha.
^Cursor para o início da linha.
[HCursor para o primeiro caractere não em branco da linha.
$Cursor até o final da linha.
[YCursor até o final da linha.
%Move para o balanceamento ( , ) , { , } , [ ou ] . Se o cursor não estiver em um dos caracteres acima, o restante da linha será pesquisado pela primeira ocorrência de um dos caracteres acima.

Pesquisar comandos de edição (comandos que acessam seu histórico de comandos):

contagem ] kBusque o comando anterior. Cada vez que k é inserido, o comando anterior é acessado novamente.
contagem ] Equivalente a k .
contagem ] [ASe o cursor estiver no final da linha, é equivalente a / com a sequência definida para o conteúdo da linha atual. Caso contrário, é equivalente a k .
contagem ] jBusque o próximo comando. Cada vez que j é inserido, o próximo comando para a frente é acessado.
contagem ] +Equivalente a j .
contagem ] [BEquivalente a j .
contagem ] Gcontagem de números de comando é buscada. O padrão é o comando histórico menos recente.
/ stringPesquise no histórico um comando anterior que contenha sequência . A sequência é finalizada por um ‘RETURN’ ou ‘NEW LINE’. Se a sequência for precedida por um ^ , a linha correspondente deverá começar com a sequência . Se a string for nula, a string anterior será usada.
? cordaO mesmo que / exceto que a pesquisa será na direção direta.
nProcura a próxima correspondência do último padrão para / ou ? comandos.
NProcura a próxima correspondência do último padrão para / ou ? , mas na direção inversa.

Comandos de edição da modificação de texto no modo Vi (esses comandos modificarão a linha):

umaEntre no modo de entrada e digite o texto após o caractere atual.
UMAAnexe o texto ao final da linha. Equivalente a $ a .
contagem ] c movimento

c [ contagem ] de movimento

Exclua o caractere atual pelo caractere em que o movimento moveria o cursor e entraria no modo de entrada. Se o movimento for c , toda a linha será excluída e o modo de entrada entrado.
CExclua o caractere atual até o final da linha e entre no modo de entrada. Equivalente a c $ .
SEquivalente a cc .
contagem ] sSubstitua caracteres sob o cursor no modo de entrada.
DExclua o caractere atual até o final da linha. Equivalente a d $ .
contagem ] d movimento

d [ contagem ] de movimento

Exclua o caractere atual pelo caractere em que o movimento seria movido. Se o movimento for d , a linha inteira será excluída.
EuEntre no modo de entrada e insira o texto antes do caractere atual.
EuInserir texto antes do início da linha. Equivalente a 0i .
contagem ] PColoque a modificação do texto anterior antes do cursor.
contagem ] pColoque a modificação do texto anterior após o cursor.
REntre no modo de entrada e substitua os caracteres na tela pelos caracteres digitados por sobreposição de moda.
contagem ] rcSubstitua os caracteres de contagem que começam na posição atual do cursor por c e avance o cursor.
contagem ] xExcluir caractere atual.
contagem ] XExcluir o caractere anterior.
contagem ] .Repita o comando de modificação de texto anterior.
contagem ] Inverta o caso do (s) caractere (s) de contagem começando na posição atual do cursor e avance o cursor.
contagem ] _Faz com que a palavra de contagem do comando anterior seja anexada e o modo de entrada inserido. A última palavra é usada se a contagem for omitida.
*Faz com que um * seja anexado à palavra atual e à tentativa de geração do nome do arquivo. Se nenhuma correspondência for encontrada, ele tocará uma campainha de áudio. Caso contrário, a palavra é substituída pelo padrão correspondente e o modo de entrada é inserido.
\Conclusão do nome do comando ou arquivo, conforme descrito acima.

Outros comandos diversos de edição do modo vi:

contagem ] y movimento

y [ contagem ] de movimento

Arranque o caractere atual através do caractere para o qual o movimento moveria o cursor e os colocará no buffer de exclusão. O texto e o cursor permanecem inalterados.
yyPuxa toda a linha.
YPuxa da posição atual até o final da linha. Equivalente a y $ .
vocêDesfazer o último comando de modificação de texto.
vocêDesfazer todos os comandos de modificação de texto executados na linha.
contagem ] vRetorna o comando hist -e $ {VISUAL: – $ {EDITOR: -vi}} count no buffer de entrada. Se a contagem for omitida, a linha atual será usada.
^ LAlimentação de linha e impressão da linha atual. Só tem efeito no modo de controle.
^ J(Nova linha) Execute a linha atual, independentemente do modo.
^ M(Retorno) Execute a linha atual, independentemente do modo.
#Se o primeiro caractere do comando for um # , esse comando exclui esse # e cada # que segue uma nova linha. Caso contrário, envia a linha após inserir um # na frente de cada linha no comando. Útil para fazer com que a linha atual seja inserida no histórico como um comentário e descomentar os comentários comentados anteriormente no arquivo do histórico.
contagem ] =Se count não for especificado, ele gera a lista de comandos ou nomes de arquivos correspondentes, conforme descrito acima. Caso contrário, a palavra sob o cursor será substituída pelo item de contagem da lista de comando ou arquivo gerada mais recentemente. Se o cursor não estiver em uma palavra, ele será inserido.
@ cartaSua lista de alias é procurada por um alias pelo nome _ letra e, se um alias desse nome for definido, seu valor será inserido na fila de entrada para processamento.
^ VExibir versão do shell.

Comandos internos

Os seguintes comandos simples são executados no processo do shell. O redirecionamento de entrada / saída é permitido. Salvo indicação em contrário, a saída é gravada no descritor de arquivo 1 e o status de saída, quando não há erro de sintaxe, é zero. Exceto por:, verdadeiro , falso , eco , newgrp e login , todos os comandos internos aceitam  para indicar o fim das opções. Eles também interpretam a opção –man como uma solicitação para exibir a página de manual no erro padrão e -? como uma solicitação de ajuda que imprime uma mensagem de uso em erro padrão. Os comandos precedidos por um ou dois símbolos † são comandos internos especiais e são tratados especialmente das seguintes maneiras:

  1. As listas de atribuição de variáveis ​​que precedem o comando permanecem em vigor quando o comando é concluído.
  2. Os redirecionamentos de E / S são processados ​​após atribuições de variáveis.
  3. Erros fazem com que um script que os contenha seja interrompido.
  4. Eles não são nomes de função válidos.
  5. As palavras que seguem um comando precedido por †† que estão no formato de uma atribuição de variável são expandidas com as mesmas regras que uma atribuição de variável. Isso significa que a substituição do til é realizada depois que o sinal = e a divisão do campo e a geração do nome do arquivo não são executados. Isso é chamado de declaração interna .
† : [ arg …]O comando apenas expande parâmetros.
† . nome [ arg …]Se name for uma função definida com a sintaxe da palavra reservada ao nome da função, a função será executada no ambiente atual (como se tivesse sido definida com a sintaxe name () ). Caso contrário, se name se referir a um arquivo, o arquivo será lido na íntegra e os comandos serão executados no ambiente atual do shell. O caminho de pesquisa especificado por PATH é usado para encontrar o diretório que contém o arquivo. Se algum argumento for fornecido, eles se tornarão os parâmetros posicionais ao processar o . O comando e os parâmetros posicionais originais são restaurados após a conclusão. Caso contrário, os parâmetros posicionais permanecem inalterados. O status de saída é o status de saída do último comando executado.
†† alias [ -ptx ] [ nome [ = valor ]] …alias sem argumentos imprime a lista de aliases no formato nome = valor na saída padrão. A opção -p faz com que o alias da palavra seja inserido antes de cada um. Quando um ou mais argumentos são fornecidos, um alias é definido para cada nome cujo valor é fornecido. Um espaço à direita no valor faz com que a próxima palavra seja verificada quanto à substituição de alias. A opção -t obsoleta é usada para definir e listar aliases rastreados. O valor de um alias rastreado é o nome do caminho completo correspondente ao nome fornecido. O valor fica indefinido quando o valor de PATH é redefinido, mas o alias permanece rastreado. Sem a opção -t , para cada nome na lista de argumentos para o qual nenhum valor é fornecido, o nome e o valor do alias são impressos. A opção -x obsoleta não tem efeito. O status de saída é diferente de zero se um nome for fornecido, mas nenhum valor e nenhum alias foram definidos para o nome.
bg [ trabalho …]Este comando existe apenas em sistemas que oferecem suporte ao controle de tarefas. Coloca cada trabalho especificado em segundo plano. O trabalho atual é colocado em segundo plano se o trabalho não for especificado. Consulte Trabalhos para obter uma descrição do formato do trabalho .
† quebra [ n ]Saia do anexo por , enquanto , até ou selecione um loop, se houver. Se n for especificado, interrompa n níveis.
built-in [ -ds ] [ -f arquivo ] [ nome …]Se o nome não for especificado e nenhuma opção -f for especificada, os internos serão impressos na saída padrão. A opção -s imprime apenas os embutidos especiais. Caso contrário, cada nome representa o nome do caminho cujo nome de base é o nome do built-in. O nome da função do ponto de entrada é determinado anexando b_ ao nome interno. Um built-in especificado por um nome de caminho será executado apenas quando esse nome de caminho for encontrado durante a pesquisa de caminho. Os recursos internos encontrados nas bibliotecas carregadas pelo arquivo .paths serão associados ao nome do caminho do diretório que contém o arquivo .paths .

Built-ins especiais não podem ser vinculados a um nome de caminho ou excluídos. A opção -d exclui cada um dos embutidos fornecidos. Em sistemas que oferecem suporte ao carregamento dinâmico, a opção -f nomeia uma biblioteca compartilhada que contém o código para built-ins. O prefixo e / ou sufixo da biblioteca compartilhada, que depende do sistema, pode ser omitido. Depois que uma biblioteca é carregada, seus símbolos ficam disponíveis para chamadas subseqüentes do builtin . Várias bibliotecas podem ser especificadas com chamadas separadas do comando embutido . As bibliotecas são pesquisadas na ordem inversa na qual são especificadas. Quando uma biblioteca é carregada, ela procura por uma função na biblioteca cujo nome é lib_init () e chama essa função com um argumento 0 .

cd [ -LP ] [ arg ]

cd [ -LP ] antigo novo

Este comando pode estar em um de dois formulários. No primeiro formulário, ele altera o diretório atual para arg . Se arg for  , o diretório será alterado para o diretório anterior. A variável do shell HOME é o argumento padrão. A variável PWD está definida no diretório atual. A variável de shell CDPATH define o caminho de pesquisa para o diretório que contém arg . Os nomes de diretório alternativos são separados por dois pontos (:). O caminho padrão é <null> (especificando o diretório atual). Observe que o diretório atual é especificado por um nome de caminho nulo, que pode aparecer imediatamente após o sinal de igual ou entre os delimitadores de dois pontos em qualquer outro lugar na lista de caminhos. Se arg começar com a / , o caminho da pesquisa não será usado. Caso contrário, cada diretório no caminho é procurado por arg . A segunda forma de cd substitui a nova string pela antiga no nome do diretório atual, PWD , e tenta mudar para esse novo diretório. Por padrão, os nomes de links simbólicos são tratados literalmente ao localizar o nome do diretório. Isso é equivalente à opção -L . A opção -P faz com que os links simbólicos sejam resolvidos ao determinar o diretório. A última instância de -L ou -P na linha de comandos determina qual método é usado. O comando cd não pode ser executado pelo rksh .
comando [ -pvxV ] name [ arg …]Sem as opções -v ou -V , o comando executa o nome com os argumentos fornecidos por arg . A opção -p faz com que um caminho padrão seja pesquisado em vez do definido pelo valor de PATH . As funções não serão pesquisadas ao encontrar o nome . Além disso, se o nome se referir a um built-in especial, nenhuma das propriedades especiais associadas aos punhais principais (“†”) será respeitada. Por exemplo, o alias predefinido redirecionar = ‘comando exec’ impede que um script seja encerrado quando um redirecionamento inválido é fornecido. Com a opção -x , se a execução do comando resultar em falha, porque há muitos argumentos, errno E2BIG , o shell chamará o nome do comando várias vezes com um subconjunto dos argumentos em cada chamada. Os argumentos que ocorrem antes da primeira palavra que se expande para vários argumentos e após a última palavra que se expande para vários argumentos serão passados ​​em cada chamada. O status de saída será o status máximo de saída de chamada. Com a opção -v , o comando é equivalente ao comando de onde descrito abaixo. A opção -V faz com que o comando aja como de onde -v .
† continuar [ n ]Continue a próxima iteração do anexo por , enquanto , até ou selecione o loop. Se n for especificado, continue no n- ésimo laço encerrado.
renegar [ trabalho …]Faz com que o shell não envie um sinal HUP para cada trabalho especificado, ou todos os trabalhos ativos, se o trabalho for omitido, quando um shell de logon terminar.
eco [ arg …]Quando o primeiro argumento não começa com a  e nenhum dos argumentos contém a \ , echo imprime cada um dos argumentos separados por um espaço e finalizados por uma nova linha. Caso contrário, o comportamento do eco depende do sistema e a impressão ou impressão descrita abaixo deve ser usada. Veja eco para uso e descrição.
†† enum [ -i ] tipo [ = ( valor …)]Cria um comando de declaração chamado tipo que é um tipo inteiro que permite um dos valores especificados como nomes de enumeração. Se = ( valor …) for omitido, o tipo deverá ser uma variável de matriz indexada com pelo menos dois elementos e os valores serão obtidos dessa variável de matriz. Se -i for especificado, os valores não diferenciam maiúsculas de minúsculas.
† eval [ arg …]Os argumentos são lidos como entrada para o shell e os comandos resultantes executados.
† exec [ -c ] [ -um nome ] [ arg …]Se arg for fornecido, o comando especificado pelos argumentos é executado no lugar desse shell sem criar um novo processo. A opção -c faz com que o ambiente seja limpo antes de aplicar designações de variáveis ​​associadas à chamada de exec . A opção -a faz com que o nome, em vez do primeiro arg , se torne argv [0] para o novo processo. Os argumentos de entrada / saída podem aparecer e afetar o processo atual. Se arg não for fornecido, o efeito desse comando é modificar os descritores de arquivo conforme prescrito pela lista de redirecionamento de entrada / saída. Nesse caso, qualquer número de descritor de arquivo maior que 2 que seja aberto com esse mecanismo será fechado ao chamar outro programa.
† sair [ n ]Faz com que o shell saia com o status de saída especificado por n . O valor será os 8 bits menos significativos do status especificado. Se n for omitido, o status de saída será o do último comando executado. Um final de arquivo também fará com que o shell saia, exceto um shell que tenha a opção ignoreeof (veja o conjunto abaixo) ativada.
†† exportar [ -p ] [ nome [ = valor ]] …Se o nome não for fornecido, os nomes e os valores de cada variável com o atributo export serão impressos com os valores citados de uma maneira que permita que eles sejam reinseridos. O comando export é o mesmo que o typeset -x, exceto se você usar a exportação em uma função, nenhuma variável local será criada. A opção -p faz com que a palavra exportação seja inserida antes de cada uma. Caso contrário, os nomes fornecidos serão marcados para exportação automática para o ambiente de comandos executados posteriormente.
falsoNão faz nada e sai 1. Usado com até para loops infinitos.
fg [ trabalho …]Este comando é apenas em sistemas que suportam o controle de tarefas. Cada trabalho especificado é trazido para o primeiro plano e aguardado na ordem especificada. Caso contrário, o trabalho atual será trazido para o primeiro plano. Consulte Trabalhos para obter uma descrição do formato do trabalho .
getconf [ nome [ nome do caminho ]]Imprime o valor atual do parâmetro de configuração fornecido pelo nome . Os parâmetros de configuração são definidos pelos padrões IEEE POSIX 1003.1 e IEEE POSIX 1003.2. O argumento do nome do caminho é necessário para parâmetros cujo valor depende do local no sistema de arquivos. Se nenhum argumento for fornecido, o getconf imprime os nomes e os valores dos parâmetros de configuração atuais. O nome do caminho / é usado para cada um dos parâmetros que requerem o nome do caminho .
getopts [ -um nome ] optstring vname [ arg …]Verifica arg para opções legais. Se arg for omitido, os parâmetros posicionais serão usados. Um argumento de opção começa com um + ou um  . Uma opção que não começa com + ou  ou o argumento  encerra as opções. As opções que começam com + são reconhecidas apenas quando a optstring começa com um + . optstring contém as letras que getopts reconhece. Se uma letra for seguida de a:, espera-se que essa opção tenha um argumento. As opções podem ser separadas do argumento por espaços em branco. A opção -? faz com que as getopts gerem uma mensagem de uso em erro padrão. O argumento -a pode ser usado para especificar o nome a ser usado para a mensagem de uso, cujo padrão é $ 0 . getopts coloca a próxima letra de opção que encontra na variável vname toda vez que é chamada. A letra da opção será anexada com um + quando arg começar com um + . O índice do próximo argumento é armazenado em OPTIND . O argumento da opção, se houver, é armazenado no OPTARG . Um dos principais : em optstring, as getopts armazenam a letra de uma opção inválida no OPTARG e definem vname como ? para uma opção desconhecida e para : quando um argumento de opção necessário estiver ausente. Caso contrário, getopts imprime uma mensagem de erro. O status de saída é diferente de zero quando não há mais opções. Não há como especificar nenhuma das opções :, + ,  ,? [ , e ] . A opção # só pode ser especificada como a primeira opção.
hist [ -e ename ] [ -nlr ] [ primeiro [ último ]]

hist -s [ antigo = novo ] [ comando ]

Na primeira forma, um intervalo de comandos do primeiro ao último é selecionado entre os últimos comandos HISTSIZE digitados no terminal. Os argumentos primeiro e último podem ser especificados como um número ou uma sequência de caracteres. Uma string é usada para localizar o comando mais recente começando com a string especificada. Um número negativo é usado como um deslocamento para o número de comando atual. Se a opção -l estiver selecionada, os comandos serão listados na saída padrão. Caso contrário, o programa editor ename é chamado em um arquivo que contém esses comandos do teclado. Se ename não for fornecido, o valor da variável HISTEDIT será usado. Se HISTEDIT não estiver definido, FCEDIT (padrão / bin / ed ) será usado como editor. Quando a edição é concluída, os comandos editados são executados se as alterações foram salvas. Se last não for especificado, será definido como primeiro . Se first não for especificado, o padrão será o comando anterior para edição e -16 para listagem. A opção -r inverte a ordem dos comandos e a opção -n suprime os números de comando ao listar. Na segunda forma, o comando é interpretado como descrito acima e o padrão é o último comando executado. O comando resultante é executado após a substituição opcional old = new ser executada.
empregos [ -lnp ] [ emprego …]Lista informações sobre cada trabalho especificado; ou todos os trabalhos ativos, se o trabalho for omitido. A opção -l lista os IDs de processo, além das informações normais. A opção -n exibe apenas os trabalhos que foram interrompidos ou encerrados desde a última notificação. A opção -p faz com que apenas o grupo de processos seja listado. Consulte Trabalhos para obter uma descrição do formato do trabalho .
matar o trabalho [ -s signame ] …

matar trabalho [ -n signum ] …

kill -Ll [ sig …]

Envia o sinal TERM (finalizar) ou o sinal especificado para os trabalhos ou processos especificados. Os sinais são dados em número com a opção -n ou em nome com a opção -s (conforme fornecido em <signal.h> , sem o prefixo ” SIG “, com a exceção de que SIGCLD é chamado CHLD ). Para compatibilidade com versões anteriores, os n e s podem ser omitidos e o número ou nome colocado imediatamente após o  . Se o sinal que está sendo enviado for TERM (término) ou HUP (hangup), o trabalho ou processo receberá um sinal CONT (continuação) se estiver parado. trabalho de argumento pode ser o ID do processo que não é membro de um dos trabalhos ativos. Consulte Trabalhos para obter uma descrição do formato do trabalho. Na terceira forma, kill -l ou kill -L , se sig não for especificado, os nomes dos sinais serão listados. A opção -l lista apenas os nomes dos sinais. -L opções lista cada nome de sinal e número correspondente. Caso contrário, para cada sig que é um nome, o número do sinal correspondente será listado. Para cada sig que é um número, é listado o nome do sinal correspondente aos 8 bits menos significativos de sig .
deixe arg …Cada argumento é uma expressão aritmética separada a ser avaliada. deixe reconhecer apenas constantes octais começando com 0 quando a opção definida letoctal estiver ativada . Consulte a avaliação aritmética acima, para obter uma descrição da avaliação da expressão aritmética. O status de saída é 0 se o valor da última expressão for diferente de zero e 1 caso contrário.
† newgrp [ argumento …]Equivalente ao exec “/ bin / newgrp arg …”.
imprimir [ -CRenprsv ] [ -u unit ] [ -f format ] [ arg …]Sem opções ou com a opção  ou  , cada argumento é impresso na saída padrão. A opção -f faz com que os argumentos sejam impressos conforme descrito por printf . Nesse caso, todas as opções e , n , r , R são ignoradas. Caso contrário, a menos que -C , -R , -r ou -v sejam especificados, as seguintes convenções de escape serão aplicadas:

\umaO caractere de alerta (ASCII 07).
\ bO caractere de backspace (ASCII 010).
\ cFaz com que a impressão termine sem processar mais argumentos e sem adicionar uma nova linha.
\ fO caractere de avanço de formulário (ASCII 014).
\ nO caractere de nova linha (ASCII 012).
\ rO caractere de retorno de carro (ASCII 015).
\ tO caractere de tabulação (ASCII 011).
\ vO caractere de tabulação vertical (ASCII 013).
\ EO caractere de escape (ASCII 033).
\\O caractere de barra invertida \ .
\ 0 xO caractere definido pela sequência octal de 1, 2 ou 3 dígitos fornecida por x .

A opção -R imprimirá todos os argumentos e opções subsequentes, exceto -n . -e faz com que as convenções de escape acima sejam aplicadas. Este é o comportamento padrão. Inverte o efeito de um -r anterior. A opção -p faz com que os argumentos sejam gravados no canal do processo gerado com ? & Em vez da saída padrão. A opção -v trata cada argumento como um nome de variável e grava o valor no formato printf% B. A opção -C trata cada argumento como um nome de variável e grava o valor no formato printf% # B. A opção -s faz com que os argumentos sejam gravados no arquivo de histórico em vez da saída padrão. A opção -u pode ser usada para especificar uma unidade de número de unidade de descritor de um dígito na qual a saída será colocada. O padrão é 1 . Se a opção -n for usada, nenhuma nova linha será adicionada à saída.

formato printf [ arg …]Os argumentos arg são impressos na saída padrão de acordo com as regras de formatação ANSI C associadas ao formato da seqüência de caracteres. Se o número de argumentos exceder o número de especificações de formato, a seqüência de formato será reutilizada para formatar os argumentos restantes. As seguintes extensões também podem ser usadas:

% bUm formato % b pode ser usado em vez de % s para fazer com que as seqüências de escape no argumento correspondente sejam expandidas conforme descrito na impressão .
% BUma opção % B faz com que cada um dos argumentos seja tratado como nome de variável e o valor binário da variável será impresso. O sinalizador alternativo # faz com que uma variável composta seja impressa em uma única linha. Isso é mais útil para variáveis ​​compostas e variáveis ​​cujo atributo é -b .
% HUm formato % H pode ser usado em vez de % s para fazer com que caracteres em arg, que são especiais em HTML e XML, sejam exibidos como nome da entidade. O sinalizador alternativo # formata a saída para uso como um URI .
% PUm formato % P pode ser usado em vez de % s para fazer com que o arg seja interpretado como uma expressão regular estendida e impresso como um padrão de shell.
% RUm formato % R pode ser usado em vez de % s para fazer com que o arg seja interpretado como um padrão de shell e impresso como uma expressão regular estendida.
% qUm formato % q pode ser usado em vez de % s para fazer com que a string resultante seja citada de uma maneira que possa ser reinicializada no shell. Quando q é precedido pelo especificador de formato alternativo, # , a sequência é citada de maneira adequada como um campo em um arquivo no formato .csv .
% ( formato da data ) TUm formato % T ( formato de data ) pode ser usado para tratar um argumento como uma sequência de data / hora e para formatar a data / hora de acordo com o formato de data definido para o comando date .
% ZUm formato % Z produzirá um byte cujo valor é 0.
% dO campo de precisão do formato % d pode ser seguido por a . e a base de saída. Nesse caso, o caractere # sinalizador faz com que o número base # seja anexado.
#O sinalizador # , quando usado com o formato % d sem uma base de saída, exibe a saída em potências de 1000 indicadas por um dos seguintes sufixos: k para kilobyte , M para megabyte , G para gigabyte , T para terabyte , P para petabyte , E para exabyte . Quando usado com o formato % i , exibe a saída em potências de 1024, indicadas por um dos seguintes sufixos: Ki Mi Gi Ti Pi Ei .
=O sinalizador = centraliza a saída na largura do campo especificado.
euO sinalizador L , quando usado com os formatos % c ou % s , trata a precisão como largura de caracteres em vez de contagem de bytes.
,The , flag, when used with the %d or %f formats, separates groups of digits with the grouping delimiter ( , on groups of 3 in the C locale.)
pwd [ -LP ]Outputs the value of the current working directory. The -L option is the default; it prints the logical name of the current directory. If the -P option is given, all symbolic links are resolved from the name. The last instance of -L or -P on the command line determines which method is used.
read [ -ACSprsv ] [ -d delim ] [ -n n ] [ [ -N n ] [ [ -t timeout ] [ -u unit ] [ vname ? prompt ] [ vname … ]The shell input mechanism. One line is read and is broken up into fields using the characters in IFS as separators. The escape character, \ , is used to remove any special meaning for the next character and for line continuation. The -d option causes the read to continue to the first character of delim rather than newline. The -n option causes at most n bytes to read rather a full line but will return when reading from a slow device as soon as any characters have been read. The -N option causes exactly n to be read unless an end-of-file is encountered or the read times out because of the -t option. In raw mode, -r , the \ character is not treated specially. The first field is assigned to the first vname , the second field to the second vname , etc., with leftover fields assigned to the last vname . When vname has the binary attribute and -n or -N is specified, the bytes that are read are stored directly into the variable. If the -v is specified, then the value of the first vname will be used as a default value when reading from a terminal device. The -A option causes the variable vname to be unset and each field that is read to be stored in successive elements of the indexed array vname . The -C option causes the variable vname to be read as a compound variable. Blanks will be ignored when finding the beginning open parenthesis. The -S option causes the line to be treated like a record in a .csv format file so that double quotes can be used to allow the delimiter character and the newline character to appear within a field. The -p option causes the input line to be taken from the input pipe of a process spawned by the shell using ?& . If the -s option is present, the input will be saved as a command in the history file. The option -u can be used to specify a one digit file descriptor unit to read. The file descriptor can be opened with the exec special built-in command. The default value of unit n is 0. The option -t is used to specify a timeout in seconds when reading from a terminal or pipe. If vname is omitted, then REPLY is used as the default vname . An end-of-file with the -p option causes cleanup for this process so that another can be spawned. If the first argument contains a ? , the remainder of this word is used as a prompt on standard error when the shell is interactive. The exit status is 0 unless an end-of-file is encountered or read has timed out.
†† readonly [ -p ] [ vname [ = value ] ] …If vname is not given, the names and values of each variable with the readonly attribute is printed with the values quoted in a manner that allows them to be re-inputted. The -p option causes the word readonly to be inserted before each one. Otherwise, the given vname s are marked readonly and these names cannot be changed by subsequent assignment. When defining a type, if the value of a readonly sub-variable is not defined the value is required when creating each instance.
† return [ n ]Causes a shell function or . script to return to the invoking script with the exit status specified by n . The value will be the least significant 8 bits of the specified status. If n is omitted, then the return status is that of the last command executed. If return is invoked while not in a function or a . script, then it behaves the same as exit.
† set [ ±BCGabefhkmnoprstuvx ] [ ±o [ option ] ] … [ ±A vname ] [ arg … ]The options for this command are as follows:

-UMAArray assignment. Unset the variable vname and assign values sequentially from the arg list. If +A is used, the variable vname is not unset first.
-BEnable brace pattern field generation. Este é o comportamento padrão.
-BEnable brace group expansion. On by default.
-CPrevents redirection > from truncating existing files. Files that are created are opened with the O_EXCL mode. Requires >? to truncate a file when turned on.
-GCauses the pattern ∗∗ by itself to match files and zero or more directories and sub-directories when used for file name generation. If followed by a / only directories and sub-directories are matched.
-umaAll subsequent variables that are defined are automatically exported.
-bPrints job completion messages as soon as a background job changes state rather than waiting for the next prompt.
-eUnless contained in a ?? or && command, or the command following an if , while , or until command or in the pipeline following ! , if a command has a non-zero exit status, execute the ERR trap, if set, and exit. This mode is disabled while reading profiles.
-fDisables file name generation.
-hEach command becomes a tracked alias when first encountered.
-k(Obsolete). All variable assignment arguments are placed in the environment for a command, not only those that precede the command name.
-mBackground jobs will run in a separate process group and a line will print upon completion. The exit status of background jobs is reported in a completion message. On systems with job control, this option is turned on automatically for interactive shells.
-nRead commands and check them for syntax errors, but do not execute them. Ignored for interactive shells.
-oThe following argument can be one of the following option names:

allexportSame as -a .
errexitSame as -e .
bgniceAll background jobs are run at a lower priority. This is the default mode.
braceexpandSame as -B .
emacsPuts you in an emacs style in-line editor for command entry.
globstarSame as -G .
gmacsPuts you in a gmacs style in-line editor for command entry.
ignoreeofThe shell will not exit on end-of-file. The command exit must be used.
palavra chaveSame as -k .
letoctalThe let command allows octal constants starting with 0.
markdirsAll directory names resulting from file name generation have a trailing / appended.
monitorSame as -m .
multilineThe built-in editors will use multiple lines on the screen for lines that are longer than the width of the screen. This may not work for all terminals.
noclobberSame as -C .
noexecSame as -n .
noglobSame as -f .
nologDo not save function definitions in the history file.
notifySame as -b .
nounsetSame as -u .
pipefailA pipeline will not complete until all components of the pipeline have completed, and the return value will be the value of the last non-zero command to fail or zero if no command has failed.
showmeWhen enabled, simple commands or pipelines preceded by a semicolon ( ; ) will be displayed as if the xtrace option were enabled but will not be executed. Otherwise, the leading ; will be ignored.
privilegedSame as -p .
verbosoSame as -v .
trackallO mesmo que -h .
viPuts you in insert mode of a vi style in-line editor until you hit the escape character (ASCII code 033). This puts you in control mode. A return sends the line.
virawEach character is processed as it is typed in vi mode.
xtraceSame as -x .

If no option name is supplied, then the current option settings are printed.

-pDisables processing of the $HOME/.profile file and uses the file /etc/suid_profile instead of the ENV file. This mode is on whenever the effective uid (gid) is not equal to the real uid (gid). Turning this off causes the effective uid and gid to be set to the real uid and gid.
-rEnables the restricted shell. This option cannot be unset once set.
-sSort the positional parameters lexicographically.
-t(Obsolete). Exit after reading and executing one command.
-vocêTreat unset parameters as an error when substituting.
-vPrint shell input lines as they are read.
-xPrint commands and their arguments as they are executed.
Do not change any of the options; useful in setting $1 to a value beginning with  . If no arguments follow this option, then the positional parameters are unset.
† shift [ n ]The positional parameters from $ n +1 … are renamed $1 … , default n is 1. The parameter n can be any arithmetic expression that evaluates to a non-negative number less than or equal to $# .
sleep secondsSuspends execution for the number of decimal seconds or fractions of a second given by seconds .
† trap [ -p ] [ action ] [ sig ] …The -p option causes the trap action associated with each trap as specified by the arguments to be printed with appropriate quoting. Otherwise, action will be processed as if it were an argument to eval when the shell receives signal(s) sig . Each sig can be given as a number or as the name of the signal. Trap commands are executed in order of signal number. Any attempt to set a trap on a signal that was ignored on entry to the current shell is ineffective. If action is omitted and the first sig is a number, or if action is  , then the trap(s) for each sig are reset to their original values. If action is the null string then this signal is ignored by the shell and by the commands it invokes. If sig is ERR then action will be executed whenever a command has a non-zero exit status. If sig is DEBUG then action will be executed before each command. The variable .sh.command will contain the contents of the current command line when action is running. If the exit status of the trap is 2 the command will not be executed. If the exit status of the trap is 255 and inside a function or a dot script, the function or dot script will return. If sig is 0 or EXIT and the trap statement is executed inside the body of a function defined with the function name syntax, then the command action is executed after the function completes. If sig is 0 or EXIT for a trap set outside any function then the command action is executed on exit from the shell. If sig is KEYBD , then action will be executed whenever a key is read while in emacs , gmacs , or vi mode. The trap command with no arguments prints a list of commands associated with each signal number.

An exit or return without an argument in a trap action will preserve the exit status of the command that invoked the trap.

verdadeiroDoes nothing, and exits 0 . Used with while for infinite loops.
†† typeset [ ±ACHSfblmnprtux ] [ ±EFLRXZi [ n ] ] [ +-M [ mapname ] ] [ -T [ tname =( assign_list ) ] ] [ -h str ] [ -a [ type ] ] [ vname [ = value ] ] …Sets attributes and values for shell variables and functions. When invoked inside a function defined with the function name syntax , a new instance of the variable vname is created, and the variable’s value and type are restored when the function completes. The following list of attributes may be specified:

-UMADeclares vname to be an associative array. Subscripts are strings rather than arithmetic expressions.
-Ccauses each vname to be a compound variable. The value names a compound variable it is copied into vname . Otherwise, it unsets each vname .
-umaDeclares vname to be an indexed array. If type is specified, it must be the name of an enumeration type created with the enum command and it allows enumeration constants to be used as subscripts.
-EDeclares vname to be a double precision floating point number. If n is non-zero, it defines the number of significant figures that are used when expanding vname . Otherwise, ten significant figures will be used.
-FDeclares vname to be a double precision floating point number. If n is non-zero, it defines the number of places after the decimal point that are used when expanding vname . Otherwise, ten places after the decimal point will be used.
-HThis option provides UNIX to host-name file mapping on non-UNIX machines.
-EULeft justify and remove leading blanks from value . If n is non-zero, it defines the width of the field, otherwise it is determined by the width of the value of first assignment. When the variable is assigned to, it is filled on the right with blanks or truncated, if necessary, to fit into the field. The -R option is turned off.
-MUse the character mapping defined by wctrans such as tolower and toupper when assigning a value to each of the specified operands. When mapping is specified and there are not operands, all variables that use this mapping are written to standard output. When mapping is omitted and there are no operands, all mapped variables are written to standard output.
-RRight justify and fill with leading blanks. If n is non-zero, it defines the width of the field, otherwise it is determined by the width of the value of first assignment. The field is left filled with blanks or truncated from the end if the variable is reassigned. The -L option is turned off.
-SWhen used in the assign_list of a type definition, it causes the specified sub-variable to be shared by all instances of the type. When used inside a function defined with the function reserved word, the specified variables has function static scope. Otherwise, the variable is unset before processing the assignment list.
-TIf followed by tname , it creates a type named by tname using the compound assignment assign_list to tname . Otherwise, it writes all the type definitions to standard output.
-XDeclares vname to be a double precision floating point number and expands using the %a format of ISO-C99. If n is non-zero, it defines the number of hex digits after the radix point that is used when expanding vname . O padrão é 10.
-ZRight justify and fill with leading zeros if the first non-blank character is a digit and the -L option has not been set. Remove leading zeros if the -L option is also set. If n is non-zero, it defines the width of the field, otherwise it is determined by the width of the value of first assignment.
-fThe names refer to function names rather than variable names. No assignments can be made and the only other valid options are -S , -t , -u and -x . The -S can be used with discipline functions defined in a type to indicate that the function is static. For a static function, the same method will be used by all instances of that type no matter which instance references it. Also, it can only use value of variables from the original type definition. These discipline functions cannot be redefined in any type instance. The -t option turns on execution tracing for this function. The -u option causes this function to be marked undefined. The FPATH variable will be searched to find the function definition when the function is referenced. If no options other than -f is specified, then the function definition will be displayed on standard output. If +f is specified, then a line containing the function name followed by a shell comment containing the line number and path name of the file where this function was defined, if any, is displayed. The exit status can be used to determine whether the function is defined so that typeset -f .sh.math.name will return 0 when math function name is defined and non-zero otherwise.
-bThe variable can hold any number of bytes of data. The data can be text or binary. The value is represented by the base64 encoding of the data. If -Z is also specified, the size in bytes of the data in the buffer will be determined by the size associated with the -Z . If the base64 string assigned results in more data, it will be truncated. Otherwise, it will be filled with bytes whose value is zero. The printf format %B can be used to output the actual data in this buffer instead of the base64 encoding of the data.
-hUsed within type definitions to add information when generating information about the sub-variable on the man page. It is ignored when used outside of a type definition. When used with -f , the information is associated with the corresponding discipline function.
-EuDeclares vname to be represented internally as integer. The right side of an assignment is evaluated as an arithmetic expression when assigning to an integer. If n is non-zero, it defines the output arithmetic base, otherwise the output base will be ten.
-euUsed with -i , -E or -F , to indicate long integer, or long float. Otherwise, all uppercase characters are converted to lowercase. The uppercase option, -u , is turned off. Equivalent to -M tolower .
-mmoves or renames the variable. The value is the name of a variable whose value will be moved to vname . The original variable will be unset. Cannot be used with any other options.
-nDeclares vname to be a reference to the variable whose name is defined by the value of variable vname . This is usually used to reference a variable inside a function whose name was passed as an argument. Cannot be used with any other options.
-pThe name, attributes and values for the given vname s are written on standard output in a form that can be used as shell input. If +p is specified, then the values are not displayed.
-rThe given vname s are marked readonly and these names cannot be changed by subsequent assignment.
-tTags the variables. Tags são definíveis pelo usuário e não têm significado especial para o shell.
-vocêWhen given along with -i , specifies unsigned integer. Otherwise, all lowercase characters are converted to uppercase. The lowercase option, -l , is turned off. Equivalent to -M toupper .
-xThe given vname s are marked for automatic export to the environment of subsequently-executed commands. Variables whose names contain a . cannot be exported.

The -i attribute cannot be specified along with -R , -L , -Z , or -f .

Using + rather than  causes these options to be turned off. If no vname arguments are given, a list of vname s (and optionally the values) of the variables is printed. Using + rather than  keeps the values from being printed. The -p option causes typeset followed by the option letters to be printed before each name rather than the names of the options. If any option other than -p is given, only those variables which have all of the given options are printed. Otherwise, the vnames and attributes of all variables that have attributes are printed.

ulimit [ -HSacdfmnpstv ] [ limit ]Set or display a resource limit. The available resource limits are listed below. Many systems do not support one or more of these limits. The limit for a specified resource is set when limit is specified. The value of limit can be a number in the unit specified below with each resource, or the value unlimited . The -H and -S options specify whether the hard limit or the soft limit for the given resource is set. A hard limit cannot be increased once it is set. A soft limit can be increased up to the value of the hard limit. If neither the H nor S option is specified, the limit applies to both. The current resource limit is printed when limit is omitted. In this case, the soft limit is printed unless H is specified. When more than one resource is specified, then the limit name and unit is printed before the value.

-umaLists all of the current resource limits.
-cThe number of 512-byte blocks on the size of core dumps.
-dThe number of K-bytes on the size of the data area.
-fThe number of 512-byte blocks on files that can be written by the current process or by child processes (files of any size may be read).
-mThe number of K-bytes on the size of physical memory.
-nThe number of file descriptors plus 1.
-pThe number of 512-byte blocks for pipe buffering.
-sThe number of K-bytes on the size of the stack area.
-tThe number of CPU seconds to be used by each process.
-vThe number of K-bytes for virtual memory.

If no option is given, -f is assumed.

umask [ -S ] [ mask ]The user file-creation mask is set to mask (see umask ). mask can either be an octal number or a symbolic value as described in the documentation of chmod . If a symbolic value is given, the new umask value is the complement of the result of applying mask to the complement of the previous umask value. If mask is omitted, the current value of the mask is printed. The -S option causes the mode to be printed as a symbolic value. Otherwise, the mask is printed in octal.
† unalias [ -a ] name …The aliases given by the list of names are removed from the alias list . The -a option causes all the aliases to be unset.
† unset [ -fnv ] vname …The variables given by the list of vnames are unassigned, ie, except for sub-variables within a type, their values and attributes are erased. For sub-variables of a type, the values are reset to the default value from the type definition. Readonly variables cannot be unset. If the -f option is set, then the names refer to function names . If the -v option is set, then the names refer to variable names. The -f option overrides -v . If -n is set and name is a name reference, then name will be unset rather than the variable that it references. The default is equivalent to -v . Unsetting LINENO , MAILCHECK , OPTARG , OPTIND , RANDOM , SECONDS , TMOUT , and _ removes their special meaning even if they are subsequently assigned to.
wait [ job … ]Wait for the specified job and report its termination status. If job is not given, then wait for all currently active child processes. The exit status from this command is that of the last process waited for if job is specified; otherwise it is zero. See Jobs for a description of the format of job .
whence [ -afpv ] name …For each name, indicate how it would be interpreted if used as a command name. The -v option produces a more verbose report. The -f option skips the search for functions. The -p option does a path search for name even if name is an alias, a function, or a reserved word. The -p option turns off the -v option. The -a option is similar to the -v option but causes all interpretations of the given name to be reported.

Invocação

Se o shell for chamado pelo exec e o primeiro caractere do argumento zero ( $ 0 ) for  , o shell será assumido como um shell de login e os comandos serão lidos em / etc / profile e, em seguida, em .profile no diretório atual ou $ HOME / .profile , se um desses arquivos existir. Em seguida, para shells interativos, os comandos são lidos a partir do arquivo nomeado, executando expansão de parâmetro, substituição de comando e substituição aritmética no valor da variável de ambiente ENV, se o arquivo existir. Se a opção -s não estiver presente e arg e um arquivo com o nome de argexiste, então ele lê e executa esse script. Caso contrário, se o primeiro argumento não contiver um / , uma pesquisa de caminho será realizada no primeiro argumento para determinar o nome do script a ser executado. O script arg deve ter permissão de execução e quaisquer configurações setuid e setgid serão ignoradas. Se o script não for encontrado no caminho, arg será processado como se tivesse nomeado um comando ou função interna. Os comandos são lidos como descrito abaixo; as seguintes opções são interpretadas pelo shell quando ele é chamado:

-DNão execute o script, mas produza o conjunto de cadeias de caracteres entre aspas duplas precedido por $ . Essas strings são necessárias para a localização do script em diferentes localidades.
-ELê o arquivo nomeado pela variável ENV ou por $ HOME / .kshrc, se não definido após os perfis.
-cSe a opção -c estiver presente, os comandos serão lidos a partir do primeiro argumento . Quaisquer argumentos restantes se tornam parâmetros posicionais começando em 0 .
-sSe a opção -s estiver presente ou se nenhum argumento permanecer, os comandos serão lidos a partir da entrada padrão. A saída do shell é gravada no descritor de arquivo 2.
-EuSe a opção -i estiver presente ou se a entrada e saída do shell estiverem conectadas a um terminal (conforme informado pelo tcgetattr ), esse shell será interativo. Nesse caso, TERM é ignorado (para que kill 0 não mate um shell interativo) e INTR seja capturado e ignorado. Em todos os casos, QUIT é ignorado pelo shell.
-rSe a opção -r estiver presente, o shell será um shell restrito.
-DUma lista de todas as seqüências de aspas duplas precedidas por $ será impressa na saída padrão e o shell será encerrado. Esse conjunto de cadeias estará sujeito à tradução do idioma quando o código do idioma não for C ou POSIX . Nenhum comando será executado.
-PSe o perfil -P ou -o estiver presente, o shell será um shell de perfil.
-R nome do arquivoA opção -R file name é usada para gerar um banco de dados de referência cruzada que pode ser usado por um utilitário separado para encontrar definições e referências para variáveis ​​e comandos.

As opções e argumentos restantes são descritos no comando set acima. Um opcional  pois o primeiro argumento é ignorado.

Apenas Rksh

O Rksh é usado para configurar nomes de login e ambientes de execução cujos recursos são mais controlados que os do shell padrão. As ações do rksh são idênticas às do ksh , exceto que o seguinte não é permitido:

  • Desativando a opção restrita
  • mudança de diretório (veja cd )
  • definir ou desarmar o valor ou atributos de SHELL , ENV , FPATH ou PATH
  • especificando nomes de caminhos ou comandos que contêm /
  • redirecting output ( > , >| , <> , and >> )
  • adding or deleting built-in commands
  • using command -p to invoke a command

The restrictions above are enforced after .profile and the ENV files are interpreted.

When a command to be executed is found to be a shell procedure, rksh invokes ksh to execute it. Thus, it is possible to provide to the end-user shell procedures that have access to the full power of the standard shell, while imposing a limited menu of commands; this scheme assumes that the end-user does not have write and execute permissions in the same directory.

The net effect of these rules is that the writer of the .profile has complete control over user actions, by performing guaranteed setup actions and leaving the user in an appropriate directory (probably not the login directory).

The system administrator often sets up a directory of commands (eg, /usr/rbin ) that can be safely invoked by rksh .

Status de saída

Errors detected by the shell, such as syntax errors, cause the shell to return a non-zero exit status. If the shell is being used non-interactively, then execution of the shell file is abandoned unless the error occurs inside a subshell in which case the subshell is abandoned. Otherwise, the shell returns the exit status of the last command executed (see also the exit command above). Runtime errors detected by the shell are reported by printing the command or function name and the error condition. If the line number that the error occurred on is greater than one, then the line number is also printed in square brackets ( [] ) after the command or function name.

arquivos

/etc/profileThe system wide initialization file, executed for login shells.
$HOME/.profileO arquivo de inicialização pessoal, executado para shells de login após / etc / profile .
$ HOME / .. kshrcArquivo de inicialização pessoal padrão, executado para conchas interativas quando ENV não está definido.
/ etc / suid_profileArquivo de inicialização alternativo, executar em vez do arquivo de inicialização pessoal quando o ID do usuário ou grupo real e efetivo não corresponde.
/ dev / nullO dispositivo nulo.

Exemplos

  ksh

Invoca o shell Korn.

bash – O interpretador de comandos do shell Bourne Again.
csh – O interpretador de comandos do shell C.
sh – O interpretador de comandos do Bourne shell.

19 de novembro de 2019

Sobre nós

A Linux Force Brasil é uma empresa que ama a arte de ensinar. Nossa missão é criar talentos para a área de tecnologia e atender com excelência nossos clientes.

CNPJ: 13.299.207/0001-50
SAC:         0800 721 7901

[email protected]

Comercial  Comercial: (11) 3796-5900

Suporte:    (11) 3796-5900
[email protected]

Copyright © Linux Force Security  - Desde 2011.