$ touch aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBBB
$ crontab aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBBB
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: No such file or directory
この動作は奇妙に見えます(エラーメッセージでパスがどのように切り取られるかを確認)。私はDebian Bullsey 11を使用しています。
これはバグですか、それともcrontabに特別な制限がある特別な理由はありますか?
こちらのドッカー画像では再現できません。https://hub.docker.com/r/willfarrell/crontab
答え1
Cygwinバージョンはcrontab
説明エラーメッセージを出力します。
file=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcd
touch "$file"
crontab "$file"
crontab: usage error: filename too long
echo "$file" | awk '{print length}'
108
このメッセージはあなたの懸念を解決しますが、いかなる説明も提供しません。
残念ながら、Debianバージョンはこれをうまく説明しません。
crontab "$file"
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTU: No such file or directory
echo 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTU' | awk '{print length}'
99
ただし、ソースコード(apt-get source crontab
)は多くの手がかりを提供しますcron.h
。
#define MAX_FNAME 100 /* max length of internally generated fn */
それからcrontab.c
:
static char Filename[MAX_FNAME];
…
(void) strncpy (Filename, argv[optind], (sizeof Filename)-1);
Filename[(sizeof Filename)-1] = '\0';
これらのフラグメントが不明な場合は、ファイル名の長さが99文字にハードコードされている制限があります。恣意的な理由以外には他に理由がないと思います。」それほど十分に長くなければなりません。". 正しいアプローチは、おそらく以下を使用することです。PATH_MAX
+1
しかし、著者はこれをしなかった。 ㅏコメントコードはおそらく1988年に(または1994年に)書かれたでしょう。しかし、定数が定式化されたのはPOSIX以前であった可能性が高いです。