Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么';t LIMIT=\'ulimit-u\'在bash中工作?_Bash - Fatal编程技术网

为什么';t LIMIT=\'ulimit-u\'在bash中工作?

为什么';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 有人可以帮忙吗?为什么原版失败了 如果转义,则命

在我的程序中,我需要知道我可以运行的最大进程数。所以我写了一个剧本。当我在shell中运行它时,它可以工作,但当在程序中使用
系统(“./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()无论如何,为什么要避开反勾号呢?POSIX
ulimit
只有一个选项
-f
,Bash提供了
[-SHabcdefilmnpqrstuvxT]
选项作为对
ulimit
的扩展。如果您使用的是POSIX shell,则只能使用
-f
。(你确定你在使用bash吗?)什么不起作用了?我收到一条消息:非法选项-你不想使用bash,你想使用getrlimit()为什么还要逃避反勾号?POSIX
ulimit
只有一个选项
-f
,bash提供了
[-SHabcdefilmnpqrstuvxT]
选项作为
ulimit
的扩展。如果您使用的是POSIX shell,则只能使用
-f
。(你确定你在用bash吗?)嘿——我完全没有想到这一点;抢手货如果反斜杠出现在他们的文字代码中,他们仍然会在其他地方遇到问题,但在这一点上,我假设他们在提问时添加了反斜杠作为格式,并且从未纠正他们的错误(或回答试图提问的人);抢手货如果反斜杠出现在他们的文字代码中,他们仍然会在其他地方遇到问题,但在这一点上,我假设他们在提问时添加了反斜杠作为格式,并且从来没有纠正他们的错误(或者回答试图提问的人)。