为什么';t LIMIT=\'ulimit-u\'在bash中工作?
在我的程序中,我需要知道我可以运行的最大进程数。所以我写了一个剧本。当我在shell中运行它时,它可以工作,但当在程序中使用为什么';t LIMIT=\'ulimit-u\'在bash中工作?,bash,Bash,在我的程序中,我需要知道我可以运行的最大进程数。所以我写了一个剧本。当我在shell中运行它时,它可以工作,但当在程序中使用系统(“./limit.sh”)时,它可以工作。我在bash工作。 这是我的密码: #/bin/bash LIMIT=\`ulimit -u\` ACTIVE=\`ps -u | wc -l \` echo $LIMIT > limit.txt echo $ACTIVE >> limit.txt 有人可以帮忙吗?为什么原版失败了 如果转义,则命
系统(“./limit.sh”)
时,它可以工作。我在bash工作。
这是我的密码:
#/bin/bash
LIMIT=\`ulimit -u\`
ACTIVE=\`ps -u | wc -l \`
echo $LIMIT > limit.txt
echo $ACTIVE >> limit.txt
有人可以帮忙吗?为什么原版失败了
如果转义,则命令替换语法不起作用。运行时:
LIMIT=\`ulimit -u\`
…您正在运行一个名为
-u`
…名为LIMIT的环境变量包含
`ulimit
…除非您的命令实际以-u
开头并在其名称中包含反勾号,否则此操作可能会失败
这是因为使用反勾号会将原本是语法的字符转换为文字,并且在运行命令之前有一个或多个var=value
对的命令时,会将这些对视为变量,以便在该命令执行期间在环境中导出
做得更好
- 不要用背勾
- 使用现代的
命令替换语法$()
- 避免多次重定向
- 避免为自己的变量使用所有大写名称(这些名称用于对操作系统或系统有意义的变量;)
做对了 为什么原版失败 如果转义,则命令替换语法不起作用。运行时:
LIMIT=\`ulimit -u\`
…您正在运行一个名为
-u`
…名为LIMIT的环境变量包含
`ulimit
…除非您的命令实际以-u
开头并在其名称中包含反勾号,否则此操作可能会失败
这是因为使用反勾号会将原本是语法的字符转换为文字,并且在运行命令之前有一个或多个var=value
对的命令时,会将这些对视为变量,以便在该命令执行期间在环境中导出
做得更好
- 不要用背勾
- 使用现代的
命令替换语法$()
- 避免多次重定向
- 避免为自己的变量使用所有大写名称(这些名称用于对操作系统或系统有意义的变量;)
做对了
您在第一行有一个输入错误:
#/bin/bash
应该是#/bin/bash
-这通常被称为“shebang”行,表示“hash”(#)+“bang”(!)
如果没有正确编写语法,脚本将通过系统的默认shell运行,该shell将该行视为注释
正如评论中指出的,这也意味着只有内置的
ulimit
命令可用的标准化选项,它不包括-u
您在第一行有一个输入错误:\bin/bash
应该是\/bin/bash
-这通常被称为“shebang”行,表示“hash”(#)+“bang”(!)
如果没有正确编写语法,脚本将通过系统的默认shell运行,该shell将该行视为注释
正如评论中指出的,这也意味着只有内置的
ulimit
命令可用的标准化选项,其中不包括-u
什么不起作用?我收到一条消息:非法选项-uin不是使用bash,而是要使用getrlimit()无论如何,为什么要避开反勾号呢?POSIXulimit
只有一个选项-f
,Bash提供了[-SHabcdefilmnpqrstuvxT]
选项作为对ulimit
的扩展。如果您使用的是POSIX shell,则只能使用-f
。(你确定你在使用bash吗?)什么不起作用了?我收到一条消息:非法选项-你不想使用bash,你想使用getrlimit()为什么还要逃避反勾号?POSIXulimit
只有一个选项-f
,bash提供了[-SHabcdefilmnpqrstuvxT]
选项作为ulimit
的扩展。如果您使用的是POSIX shell,则只能使用-f
。(你确定你在用bash吗?)嘿——我完全没有想到这一点;抢手货如果反斜杠出现在他们的文字代码中,他们仍然会在其他地方遇到问题,但在这一点上,我假设他们在提问时添加了反斜杠作为格式,并且从未纠正他们的错误(或回答试图提问的人);抢手货如果反斜杠出现在他们的文字代码中,他们仍然会在其他地方遇到问题,但在这一点上,我假设他们在提问时添加了反斜杠作为格式,并且从来没有纠正他们的错误(或者回答试图提问的人)。