limite de caracteres da linha de comando do Linux

10

Estou passando uma variável para um script na linha de comando. Qual é o limite de caracteres de um comando? por exemplo:

$ MyScript reallyreallyreally...reallyreallyreallylongoption

Obrigado.

    
por robdog 23.07.2010 / 14:03

3 respostas

14

O limite imposto pelo shell / OS é geralmente muito longo - geralmente um ou duzentos mil caracteres.

getconf ARG_MAX fornecerá o limite máximo de entrada para um comando. No sistema Debian eu atualmente tenho um terminal aberto neste retorna 131072 que é 128 * 1024. O limite é reduzido por suas variáveis de ambiente, como se minha memória me servisse corretamente, elas são passadas na mesma estrutura pelo shell, embora isso só tire algumas centenas de caracteres na maioria dos casos. Para encontrar uma aproximação deste valor, execute env | wc -c - isto sugere 325 caracteres na hora atual neste login nesta máquina.

Os scripts provavelmente permitirão essa extensão completa, mas não é improvável que outros utilitários imponham seus próprios limites intencionalmente ou por meio de problemas de design. Também pode haver limites artificiais para quanto tempo um argumento individual em uma linha de comando longa pode ser e / ou quanto tempo um caminho para um arquivo pode ser.

    
por 23.07.2010 / 15:06
3

O ARG_MAX realmente limita o tamanho total da linha de comando e do ambiente, mas você está enfrentando uma limitação adicional: um argumento não deve ser maior que MAX_ARG_STRLEN (que infelizmente é codificado para 131072).

Veja link

    
por 15.04.2017 / 18:45
1

Você quer dizer qual é o maior comprimento variável? Para descobrir isso, você pode usar o "x" do perl para criar um nome de variável muito longo:

 VAR='perl -e 'print "a"x131071'' ; bash a.sh $VAR

No meu sistema 131071 funciona:

e a variável é impressa em 131072, é muito grande:

VAR='perl -e 'print "a"x131072'' ; bash a.sh $VAR
bash: /bin/bash: Argument list too long
    
por 23.07.2010 / 15:06