Perguntas sobre 'shell'

3
respostas

Se os processos herdam o ambiente do pai, por que precisamos exportar?

Eu li aqui que a finalidade de export em um shell é disponibilizar a variável para sub-processos iniciados a partir do shell. No entanto, também li aqui e aqui que "Os processos herdam seu ambiente de seus pais (o processo que os in...
19.05.2014 / 15:23
3
respostas

Por que não consigo escapar de espaços em um script bash? [duplicado]

Estou tentando escapar do caractere de espaço para um caminho no Bash, mas não usando uma barra invertida ou citações funciona. Script .sh: ROOT="/home/hogar/Documents/files/" FILE=${ROOT}"bdd.encrypted" DESTINATION="/home/hogar/Ubun...
10.01.2014 / 00:40
6
respostas

Parêntese na expr aritmética: 3 * (2 + 1) ______ qstntxt ___

%code% parece não gostar de parênteses (usado em matemática para especificar a prioridade do operador):

%pre%

Como expressar a prioridade do operador no bash?

    
______ azszpr149832 ___

Outra maneira de usar %code% bash builtin:

%pre%

Nota

Como @ Stéphane Chazelas apontou , em %code% você deve usar %code% para fazer aritmética %code% ou %code% para legibilidade.

Para portabilidade, use %code% como @Bernhard answer .

    
______ azszpr149830 ___

Você pode usar a expansão aritmética.

%pre%

Na minha opinião pessoal, isso parece um pouco melhor do que usar %code% .

De %code%

%bl0ck_qu0te%     
______ azszpr149916 ___

Não há razão para usar %code% para aritmética em shells modernos.

POSIX define o operador de expansão %code% . Então você pode usar isso em todos os shells compatíveis com POSIX (o %code% de todos os Unix-gostos modernos, traço, bash, yash, mksh, zsh, fino, ksh ...).

%pre%

%code% também introduziu um %code% builtin que é transmitido com o mesmo tipo de expressão aritmética, não expande para algo, mas retorna um status de saída com base em se a expressão é resolvida como 0 ou não, como em %code% :

%pre%

No entanto, como a cotação a torna inábil e não muito legível (não na mesma proporção que %code% , é claro), %code% também introduziu uma forma alternativa %code% :

%pre%

, que é muito mais legível e deve ser usado em seu lugar.

%code% e %code% só estão disponíveis em %code% , %code% e %code% . A sintaxe %code% deve ser preferida se a portabilidade para outros shells for necessária, %code% é necessário apenas para shells pré-POSIX semelhantes a Bourne (normalmente o shell Bourne ou versões antigas do shell Almquist).

Na frente não-Bourne, existem alguns shells com operador aritmético integrado:

  • %code% / %code% (na verdade, o primeiro shell Unix com avaliação aritmética incorporada):

    %pre%
  • %code% (com base em %code% )

    %pre%
  • como uma nota de história, a versão original do shell Almquist, como publicado no usenet em 1989, tinha um %code% construído (na verdade, mesclado com %code% ), mas foi removido posteriormente.

______ azszpr149991 ___

%code% é um comando externo, não é uma sintaxe especial do shell. Portanto, se você quiser que %code% veja os caracteres especiais do shell, será necessário protegê-los da análise do shell, citando-os. Além disso, %code% precisa que cada número e operador sejam passados como um parâmetro separado. Assim:

%pre%

A menos que você esteja trabalhando em um antigo sistema unix dos anos 1970 ou 1980, há muito poucas razões para usar %code% . Antigamente, os shells não tinham uma maneira interna de realizar aritmética, e você precisava chamar o utilitário %code% . Todos os shells POSIX possuem aritmética interna por meio da sintaxe expansão aritmética .

%pre%

A construção %code% se expande para o resultado da expressão aritmética (escrita em decimal). Bash, como a maioria das shells, suporta apenas módulos aritméticos inteiros 2 64 (ou módulo 2 32 para versões mais antigas do bash e algumas outras shells em máquinas de 32 bits). p>

O Bash oferece uma sintaxe de conveniência adicional quando você deseja realizar atribuições ou para testar se uma expressão é 0, mas não se importa com o resultado. Esta construção também existe em ksh e zsh, mas não em sh simples.

%pre%

Além da aritmética inteira, %code% oferece algumas funções de manipulação de string. Eles também são incluídos pelos recursos de shells POSIX, exceto por um: %code% testa se a string corresponde ao regexp especificado. Um shell POSIX não pode fazer isso sem ferramentas externas, mas o bash pode com %code% (com um sintaxe diferente de regexp - %code% é uma ferramenta clássica e usa BRE, bash usa ERE).

A menos que você esteja mantendo scripts executados em sistemas de 20 anos, não é necessário saber que %code% já existiu. Use aritmética de shell.

    
______ azszpr149824 ___

Use parênteses com aspas:

%pre%

As citações evitam que o bash interprete os parênteses como a sintaxe bash.

    
______ azszpr349827 ___

Se você tiver bc ...

%pre%     
___

expr parece não gostar de parênteses (usado em matemática para especificar a prioridade do operador): expr 3 * (2 + 1) bash: syntax error near unexpected token '(' Como expressar a prioridade do operador no bash?     
12.08.2014 / 06:09
6
respostas

No linux, como deletar todos os arquivos EXCETO o padrão * .txt?

Eu sei como excluir todo o arquivo txt no diretório atual por rm *.txt . Alguém sabe como apagar todos os arquivos no diretório atual EXCETO txt arquivo?     
05.06.2013 / 15:50
1
resposta

Como alterar o shell cron (sh para bash)?

É possível fazer comandos no crontab executar com bash em vez de sh? Eu sei que você pode passar comandos para bater com -c , mas isso é chato e eu nunca uso sh de qualquer maneira.     
10.10.2013 / 15:22
3
respostas

Como executar o tempo em vários comandos E gravar a saída de tempo para o arquivo?

Eu quero executar o comando time para medir o tempo de vários comandos. O que eu quero fazer é: Meça o tempo de execução de todos eles adicionados juntos Grave a saída time em um arquivo Escreva o STDERR do comando que estou...
22.08.2012 / 04:14
6
respostas

Como usar 'which' em um comando com alias?

Como a maioria dos usuários, tenho vários aliases configurados para fornecer um conjunto padrão de sinalizadores para programas usados com frequência. Por exemplo, alias vim='vim -X' alias grep='grep -E' alias ls='ls -G' O problema é que,...
02.04.2011 / 20:32
4
respostas

Como desfazer 'set -x'?

Eu digitei set -x no terminal. Agora o terminal continua imprimindo o último comando executado no topo da minha saída, então o comando ~]$echo "this is what I see" retorna + echo 'this is what I see' this is what I see Não ex...
07.08.2014 / 18:54
4
respostas

Envia SIGTERM para filho no Bash

Eu tenho um script Bash, que é semelhante a este: #!/bin/bash echo "Doing some initial work...."; /bin/start/main/server --nodaemon Agora, se o bash shell executando o script receber um sinal SIGTERM, ele também deve enviar um SIGTERM par...
26.07.2014 / 18:54
6
respostas

Como verificar se o bash pode imprimir cores

Eu quero saber se há alguma maneira de verificar se o meu programa pode gerar saída de terminal usando cores ou não. Executando comandos como less e observando a saída de um programa que produz usando cores, a saída é exibida incorretament...
23.03.2011 / 14:44