at_takuya.sasaki
2015年3月1日 21時30分
Armadilloのカーネルソースにパッチを当てるときにpatchコマンドを使うが、なぜか「そのようなファイルやディレクトリはありません」といわれることがある。
atmark@atde5:~/work840/atmark-dist/linux-3.x$ patch -p1 < ../../hoge.patch bash: ../../hoge.patch: そのようなファイルやディレクトリはありません
ファイルはちゃんと~/work840に存在しているし、そもそも[../../hoge.patch]はTABキーによるファイル名補完で出てきたファイル名。
これはpatchを実行しているのがシンボリックリンクで指定されているディレクトリだからのよう。 linux-3.xはシンボリックリンクで、実際には一つ上のlinux-3.4-at4である。
atmark@atde5:~/work840/atmark-dist$ ls -la linux-3.x lrwxrwxrwx 1 atmark atmark 16 8月 12 19:05 linux-3.x -> ../linux-3.4-at4
なので物理的には以下のディレクトリにいることになる。
atmark@atde5:~/work840/atmark-dist/linux-3.x$ pwd -P /home/atmark/work840/linux-3.4-at4
*pwdの-Pは--physicalの略で、すべてのシンボリックリンクをたどる。
なので、物理的にどのディレクトリにいるかを考慮して、以下のように実行すれば成功します。
atmark@atde5:~/work840/atmark-dist/linux-3.x$ patch -p1 < ../hoge.patch
以上