2016-08-09 11 views
0

実行ファイルへのパスの長さが107文字になるように私のLinuxマシンに置かれた実行ファイルを持っています。コマンド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文字であることを確認しました。ダッシュやシェルにファイルパスに制限があるかどうかはわかりませんでした。私のマシンでは、/ bin/shは/ bin/dashへのシンボリックリンクです。

ダッシュによって強制されるファイルパスでこの制限を81文字まで説明できますか?限界を増やす方法はありますか?

+0

'/ subpath /'は存在していますか?それは何ですか、/(ルート)またはサブフォルダ内のフォルダですか? (なぜそれを完全なパスとして参照するのですか?) –

+1

実際のパスが長さよりも関係していると思われます。 – chepner

+0

@OleksandrKravchuk、 '/ subpath /'は存在しません。 '/ path/to/the/executable 'の最初の81文字です。実行ファイルはさまざまなディレクトリの中に置かれ、現在のディレクトリを変更してファイルを '。/ file'として実行できますが、Javaコードから実行していますので、完全なパスを提供する必要があります。 – user2888308

答えて

1

はい、(原因のLinuxへ)dashは、ファイルパスの長さに制限があります。

  • パスにエントリが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文字の名前に影響を与えます。ここでは200の文字がdashでうまく動作することを示す例です:

$ 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タグの下にそれらを別々に投稿してください。ファイル名を省略したりマスクしたりしないように注意してください。正確な値は大変重要です。

関連する問題