Dash,filepath是否有任何限制

时间:2016-08-09 19:23:05

标签: linux shell dash-shell

我有一个可执行文件放在我的Linux机器上,使得可执行文件的路径长度为107个字符。我使用命令echo -n "/path/to/the/executable" | wc -c -m找到了一些字符。当我尝试以完整路径执行可执行文件时,我收到以下错误:

sh: 1: /subpath/to/the/executable: not found

我检查了/subpath/to/the/executable的长度,它是81个字符。如果我将我的可执行文件放置为其路径长度小于81个字符,我就不会得到上面的sh error

我做了一些搜索,发现Linux env上的文件路径限制是255个字符。我无法找到dash或shell对文件路径有任何限制。在我的机器上/ bin / sh是/ bin / dash的符号链接。

有人可以解释破折号强制执行的文件路径上81个字符的限制吗?有没有办法增加限额?

1 个答案:

答案 0 :(得分:1)

是的,dash(由于Linux)对文件路径的长度有限制:

  • 路径中的任何条目都不能超过255个字符。
  • 总路径不能超过4095个字符。

以下示例说明了这一点:

$ "$(head -c 255 /dev/zero | tr '\0' 'x')"
dash: 2: xxxxxx[...]xxxxxxx: not found

$ "$(head -c 256 /dev/zero | tr '\0' 'x')"
dash: 3: xxxxxx[...]xxxxxxxx: File name too long

$ "$(while true; do printf "/x"; done | head -c 4095)"
dash: 4: /x/x/[...]/x/x/x/: not found

$ "$(while true; do printf "/x"; done | head -c 4096)"
dash: 5: /x/x/[...]/x/x/x/x: File name too long

无限制会影响81个字符或107个字符的名称。这是一个示例,显示在dash中只有200个字符正常工作:

$ name="./$(head -c 200 /dev/zero | tr '\0' x)"
$ printf '%s\n' '#!/bin/sh' 'echo "hello world"' > "$name"
$ chmod +x "$name"
$ "$name"
hello world

如果您对Java程序无法正确执行命令的原因有任何疑问,请在java标记下单独发布。确保不要缩写或屏蔽文件名,因为确切的值非常重要。