ulimit-u дает недопустимую ошибку опции при выполнении из сценария, но не когда от терминала

У меня есть следующий сценарий:

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

Вывод, который я получаю,

OUTPUT: 
ACTOP 
ulimit: 7: Illegal option -u

Но если я использую ulimit -u 3 в терминале непосредственно это работает. -t и -f опции хорошо работают как бы то ни было.

Когда я изменяю хижину на #!/bin/bash это работает, но теперь это отказывается выполнять код если нет. из позволенных процессов> 132. Что-то меньшее чем ulimit-u 132 не позволяют выполнение. В терминале непосредственно я смог работать с ulimit -u 3.

5
задан 5 February 2013 в 06:11

1 ответ

ulimit встроенная оболочка, не программа:

$ type ulimit
ulimit is a shell builtin

То, что это означает, является этим ulimit может не работать тот же путь с каждой оболочкой.

Оболочка по умолчанию в Ubuntu является Bash, и это - оболочка, которую Вы используете от терминала.

Однако в Вашем сценарии Вы используете sh, то, которым (по умолчанию) обеспечивают, является Тире, подобная оболочка, но отличающаяся от Bash. Сравните:

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

Существует по крайней мере два решения для Вашей проблемы:

  1. измените свою хижину от #!/bin/sh кому: #!/bin/bash;
  2. использовать -p вместо -u.

Я рекомендовал бы первое решение, потому что Bash имеет намного больше функций, чем Тире. Недостаток состоит в том, что Bash медленнее, но это, Ваш сценарий не является критическим по отношению к производительности, это не будет проблемой.

Для получения дополнительной информации о различии между Bash ulimit и Тире ulimit, Вы видите man bash и man dash, затем выполните поисковый ввод /ulimit. Кроме того, Bash обеспечивает a help встроенный, который можно использовать в качестве альтернативы странице справочника.

3
ответ дан 23 November 2019 в 10:31

Другие вопросы по тегам:

Похожие вопросы: