У меня есть следующий сценарий:
#!/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
.
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
Существует по крайней мере два решения для Вашей проблемы:
#!/bin/sh
кому: #!/bin/bash
;-p
вместо -u
.Я рекомендовал бы первое решение, потому что Bash имеет намного больше функций, чем Тире. Недостаток состоит в том, что Bash медленнее, но это, Ваш сценарий не является критическим по отношению к производительности, это не будет проблемой.
Для получения дополнительной информации о различии между Bash ulimit
и Тире ulimit
, Вы видите man bash
и man dash
, затем выполните поисковый ввод /ulimit
. Кроме того, Bash обеспечивает a help
встроенный, который можно использовать в качестве альтернативы странице справочника.