Isso é um bug?
Não. sudo
não tem conhecimento de comandos incorporados aos vários shells, como ulimit
e cd
.
Você foi presenteado com duas maneiras de resolver isso - usando um shell como intermediário e ajustando os limites em outro lugar do que na própria linha de comando. Aqui está um terceiro, para as situações em que alguém está tentando usar esses comandos para fazer modificações no estado do processo, em vez de exibi-lo.
Se alguém pudesse executar os builtins do shell como sudo ulimit …
ou sudo cd …
para modificar o estado do processo, isso não seria particularmente útil. Isso não seria executado depois disso, no processo cujos limites ou diretório de trabalho foram alterados. Uma pessoa ajustaria os limites do processo ou o diretório de trabalho apenas para sair imediatamente do processo.
Mas existem conjuntos de ferramentas com comandos externos de carregamento em cadeia com estas funções. Eles fazem a mesma coisa que os integrantes do shell, mas também carregam a corrente para outro programa depois de terem feito isso.
Eles são os vários conjuntos de ferramentas da família daemontools - daemontools, daemontools-encore, nosh, perp, s6 , freedt e runit.
As ferramentas para definir limites e, em seguida, carregar a cadeia para outro programa são variadamente softlimit
(daemontools), softlimit
(freedt), softlimit
(daemontools-encore) softlimit
(nosh), s6-softlimit
(s6), chpst
(runit) e runlimit
(perp). Portanto, pode-se executar, digamos, vim com um limite de tamanho de arquivo de núcleo alterado usando daemontools, daemontools-encore, nosh ou freedt com o comando:
sudo softlimit -c 0 vim
O
nosh também tem um comando ulimit
similar que usa diferentes tamanhos de unidade para os vários limites para os usados com softlimit
:
sudo ulimit -c 0 vim
O mesmo vale para a mudança do diretório, para o qual existem as chdir
cadeia externa comando de carregamento:
sudo chdir /etc vim rc.local
e o cd
comando externo de execline :
sudo /command/cd /etc vim rc.local