Cygwin + MinGW + GCC 相談室 Part 8 (988レス)
上下前次1-新
605(1): 2019/12/23(月)14:06 ID:sEnpgkKc(2/4) AAS
 NTFSのリンクはシンボリックリンクではないでしょ 
606: 2019/12/23(月)14:48 ID:Losi+wwQ(1/4) AAS
 シンボリックリンクあるよ、ジャンクションじゃないやつ 
607: 2019/12/23(月)15:26 ID:IO6RyZUn(4/7) AAS
 >>605 
 シンボリックリンクはSever2008/Vistaから導入された。もう10年以上前になる。 
 https://www.atmarkit.co.jp/fwin2k/win2ktips/988symlink/symlink.html 
 つかお前、このレベルの話を知らないでその言い草は完全に老害化してるぞ。 
608: 2019/12/23(月)15:39 ID:Losi+wwQ(2/4) AAS
 mklink /? で普通に表示されるのに 
 それすらやったことないのか? 
609: 2019/12/23(月)15:40 ID:Losi+wwQ(3/4) AAS
 共有フォルダ作るときなんか 
 シンボリックリンクとジャンクションの違いを知らないと困るだろうが 
610: 2019/12/23(月)15:41 ID:sEnpgkKc(3/4) AAS
 みなさん思いのほか親切ですね 
611(1): 2019/12/23(月)15:47 ID:nbY+qllN(1) AAS
 >>604 
 シンボリックリンクもジャンクションも辿れるし、環境変数の設定(CYGWIN=winsymlinks:nativestrict)によってはln -sやtarの展開でNTFSのシンボリックリンクができる 
 NTFS側でD:とかをリンク先にしても、勝手に/cygdrive/d以下に読み替えてくれる 
 cygdrive以下だけ動かないなら、/etc/fstabの設定がおかしいとか? 
612(2): 2019/12/23(月)15:48 ID:sEnpgkKc(4/4) AAS
 だけどシンボリックリンクωを名乗ってるだけでシンボリックリンクではないですねこれ 
613: 2019/12/23(月)15:52 ID:Losi+wwQ(4/4) AAS
 難癖つけたいんなら、具体的に問題を指摘しろや 
614: 2019/12/23(月)15:54 ID:qAO2lZtX(1) AAS
 Windowsには 
 1.ハードリンク 
 2.ジャンクション 
 3.あほなシンボリックリンク 
 4.だるいシンボリックリンク 
 がある 
615(1): 2019/12/23(月)16:12 ID:IO6RyZUn(5/7) AAS
 >>611 
 すまんが、/cygdrive以下だけ動かない、というのは間違いだった。 
 動作としては、シンボリックリンクを辿ることは出来るが、戻れない、というものだ。 
  
 本来はシンボリックリンクはカレントと共に使用される。 
 つまりD:/dev/debugがシンボリックリンクでそこにD:/devからcdして入ったら、 cd .. だとD:/devに戻って来れないといけない。 
 (シンボリックリンク先に入った時の元に戻る。他から入ったらそこに当然戻る) 
 これが出来ておらず、debugしかないディレクトリ(というものを作って渡しているのだと思う)に戻ってしまう。 
 だから下から上が参照出来ない。上から下は参照出来るし、 
 下から上でも自分に戻ってくるのなら参照出来る。(言葉だと分かりにくいが要するに以下が通る) 
 MyMachine@MyName /cygdrive/d/dev/debug 
 $ less ../debug/some_file 
 下から上でもファイル名の補完は出来るのでbash自体は動作してる。 
 なお cd ../.. とシンボリックリンクを跨いで2つ上がることは可能。 
 cdってbashのコマンドだっけ?だとして、やはりbash自体は動作してる。 
 bashから各アプリに渡す時に失敗しているか、cygwin1.dll自体が対応してないか、だと思う。 
  
 バグ報告してもいいけど、それ以前に64bit環境の動作を確かめてからでないとウザがられる。 
 というわけで普段から64bit環境で使っている人がいたら試してみてくれ。 
>>612 
 いや完全にシンボリックリンクだよ。 
 ln -s と使い勝手は同じ。 
616: 2019/12/23(月)16:26 ID:CGg4xw4r(2/2) AAS
 cygwinはもう永眠させてやれ 
 WSLに乗っ取られた 
617: 2019/12/23(月)18:46 ID:wtBUbgEZ(1) AAS
 >>612 
 黙れ! 
618(1): 2019/12/23(月)22:27 ID:nMe23UdH(1) AAS
 >>615 
 何をしようとしているか大体分かった。 
 ・/cygdrive/d/dev/debug はシンボリックリンクで /cygdrive/d/test/debug を指すと仮定 
 ・/cygdrive/d/dev/some_file があると仮定 
 このとき 
 ・まずcd /cygdrive/d/dev/debugする 
 ・次にcp ../some_file .するとファイルが無いと言われる 
 ということだと思う。もしそうならそれがUNIX系では普通。LinuxやMacでもそうなる。 
  
 これは、cdした時点で既にカレントディレクトリが/cygdrive/d/test/debugに移っているからで、cpは/cygdrive/d/test/some_fileを読もうとしているために起こる。つまり 
 >本来はシンボリックリンクはカレントと共に使用される。 
 がUNIX的には正しくない。 
  
 実際の挙動としては、 
 ・UNIXの場合、カーネル的にはカレントディレクトリはあくまでもディレクトリで、シンボリックリンクをパスの途中に含むことはできない 
 ・cd ..でもといたディレクトリに戻るのはbashがシンボリックリンクを本当のデイレクトリのようにエミュレーションしているから(set -Pで切れる) 
 ・これは基本的には内部コマンドのcdやpwdに対してのみできることで、外部コマンドのcpやlessに対してはできない(引数の..が親ディレクトリの意味になるかはコマンドに依存するから、シェルが勝手に置き換えられない) 
 ・シェルはPWD環境変数にシンボリックリンクを含むロジカルなカレントディレクトリを出力するので、これを見るようにすれば原理的には外部コマンドもエミユレーションに対応できる(危なっかしいので普通はしない) 
  
 WindowsのシンボリックリンクはUNIXと違ってOS自体がシンボリックリンクを含むカレントディレクトリを扱っているようだが、CYGWINはUNIXに合わせていると考えられる。 
619(1): 2019/12/23(月)23:39 ID:IO6RyZUn(6/7) AAS
 >>618 
 こちらの状況は正しく伝わっており、君の言っていることも正しい。 
 こちらも615を書いた後、遠い昔にシンボリックリンク周りでトラブった記憶があり、 
 あれはなんだったかな?と思っていたところだった。 
  
 つまりbashで上手く誤魔化していてくれているわけだ。 
 ではtcshは?と確認したが、こちらもsymlinks変数で誤魔化し方を調整出来るようになっている。 
 https://linuxjm.osdn.jp/html/tcsh/man1/tcsh.1.html 
 結果、Cygwinとしては仕様通り、UNIXは糞仕様(≒仕様バグ)だな。 
  
 突っ込む必要はないと思うが、 
 > (引数の..が親ディレクトリの意味になるかはコマンドに依存するから、シェルが勝手に置き換えられない) 
 これはよく分からない。 
 bashがコマンドに引数を渡すときにあらかじめシンボリックリンク周りを解決していたら、どういう問題が発生する? 
 というかtcshだとsymlinks=expandに設定したらそうなるらしい。 
 今回で言えば、 
 MyMachine@MyName /cygdrive/d/dev/debug 
 $ cp ../some_file .  
 を cp /cygdrive/d/dev/somefile /cygdrive/d/dev/debug として実行すれば問題ないはず。 
 (.を展開する必要はないかもだが) 
 既存シェルスクリプトの互換性が無くなるだけなら仕様バグでした、残念でした、でしかなく、 
 後発のwindowsでは修正されているということになる。 
 シンボリックリンクを辿って、その上の「論理的ではない、物理的上位ディレクトリ」を辿る必要がある使い方なんて無いはず。 
  
 なお上記man of tcshのsymlinksの最後の 
 > > cd ".."; echo $cwd  
 > /tmp/from  
 > > /bin/echo ..  
 > /tmp/to ←これがよく分からん、/tmpではなくて?あるいはコマンドが .. ではなく /bin/echo . なら納得だが 
 > > /bin/echo ".."  
 > .. 
 分かれば出来れば解説よろしく。 
620(2): 2019/12/23(月)23:43 ID:gENEPh5i(1) AAS
 WindowsがーではなくCygwinの問題でしょ 
 WindowsはWindowsの仕様でやってる。それがなんであれ正しい仕様 
  
 Cygwinがエミュレート機能をすべて行ってる 
 問題があるならそれはCygwinの問題 
  
 WSLならその問題も解決してるだろうさ 
621: 2019/12/23(月)23:58 ID:IO6RyZUn(7/7) AAS
 >>620 
 それは違う。 
 Cygwinはエミュレーションレイヤーを提供しており、つまりUnixのシステムコールを受け付けているだけ。 
 だから仕様としてUnixと同じ動作になる。 
 詳しくはWikiなり本家なり読めばいい。 
  
 問題はUnixの糞仕様が今も修正されずそのままbash等で誤魔化され続け、 
 windowsでは修正された?為に動作が異なっている事による。 
 ただこれをCygwinで修正することは出来ないし、するべき事柄でもない。 
622: 2019/12/24(火)00:05 ID:8h2rOUkn(1/2) AAS
 > Cygwinはエミュレーションレイヤーを提供しており、つまりUnixのシステムコールを受け付けているだけ。 
 ただしい 
  
 ? だから仕様としてUnixと同じ動作になる。 
 ○ 仕様としてUnixと同じ動作になるように目指すべきだが、できてない 
623(2): 2019/12/24(火)00:06 ID:8h2rOUkn(2/2) AAS
 なんか文字化けする方法のバツを記録してるな。これでいいか? 
  
 × だから仕様としてUnixと同じ動作になる。 
 ○ 仕様としてUnixと同じ動作になるように目指すべきだが、できてない 
624: 2019/12/24(火)00:22 ID:6GYTbaHl(1/4) AAS
 >>620 
 なおWSLは理屈上はUnixの動作になるはず。 
 ただしbash等を見る限り既知の問題だから対策出来そうではあるが、 
 バイナリ互換なので現実的に無理だと思う。 
 (もちろんwindows専用bashを用意すればいいが、それだと既存のシェルスクリプトが動かなくなる。 
 といってもそれで問題が発生するような奴はWSLなんて使わずDockerだと思うが) 
  
 が、まあ、俺に関して言えば、 
 問題の詳細は判明し、特段問題ないから当面はCygwinを使う。 
(すまんがNGに当たっているようなのでバラバラにして投稿する) 
上下前次1-新書関写板覧索設栞歴
あと 364 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.021s