我有一个可执行文件放在我的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个字符的限制吗?有没有办法增加限额?
答案 0 :(得分:1)
是的,dash
(由于Linux)对文件路径的长度有限制:
以下示例说明了这一点:
$ "$(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
标记下单独发布。确保不要缩写或屏蔽文件名,因为确切的值非常重要。