ulimit -u dá erro de opção ilegal ao executar a partir de um script, mas não quando de um terminal

5

Eu tenho o seguinte script:

#!/bin/sh
echo "OUTPUT:"
gcc temp.c
echo "ACTOP"
ulimit -t 1
ulimit -f 1024
ulimit -u 3
./a.out > out.txt

A saída que recebo é

OUTPUT: 
ACTOP 
ulimit: 7: Illegal option -u

Mas se eu usar ulimit -u 3 no terminal diretamente, isso funciona. As opções -t e -f funcionam bem no entanto.

Quando eu altero o shebang para #!/bin/bash ele funciona, mas agora ele se recusa a executar código, a menos que o não. de processos permitidos > 132 Qualquer coisa menor que ulimit -u 132 não permite execução. No terminal, eu consegui trabalhar com ulimit -u 3 .

    
por Akash 21.01.2012 / 04:09

1 resposta

3

ulimit é um shell embutido, não um programa:

$ type ulimit
ulimit is a shell builtin

O que isso significa é que ulimit pode não funcionar da mesma maneira em todos os shell.

O shell padrão no Ubuntu é o Bash, e é o shell que você usa no terminal.

No entanto, no seu script, você está usando sh , que (por padrão) é fornecido pelo Dash, um shell semelhante, mas diferente do Bash. Comparar:

$ bash
$ ulimit -u
29901
$ dash
$ ulimit -u
dash: 1: ulimit: Illegal option -u

Existem pelo menos duas soluções para o seu problema:

  1. altere seu shebang de #!/bin/sh para #!/bin/bash ;
  2. use -p em vez de -u .

Eu recomendaria a primeira solução, porque o Bash tem muito mais recursos do que o Dash. A desvantagem é que o Bash é mais lento, mas o seu script não é crítico para o desempenho, isso não será um problema.

Para obter mais informações sobre a diferença entre ulimit do Bash e ulimit do Dash, você pode ver man bash e man dash e, em seguida, executar uma pesquisa digitando /ulimit . Além disso, o Bash fornece um help incorporado que você pode usar como uma alternativa para a página do manual.

    
por Andrea Corbellini 05.02.2013 / 14:15