Powershell: Windowsではデフォルトでスラッシュを䜿甚したす

䜜成日 2019幎09月11日  Â·  49コメント  Â·  ゜ヌス: PowerShell/PowerShell

新機胜/拡匵機胜の抂芁

PowerShellはクロスプラットフォヌムを目指しおいたすが、WindowsずLinuxの䞡方のパスでの操䜜で倚くの問題が発生しおいたす。 近い将来、Windowsで\をサポヌトする必芁があるこずは理解しおいたすが、少なくずもデフォルトのパス区切り文字を/に蚭定するこずで、デフォルトのパス文字をWindowsず* nixの䞡方で同じにしたいず思いたす。 -replace "\\", "/"を䜿甚しおパスを正芏化するように匷制するこずです。

Issue-Enhancement Resolution-By Design

最も参考になるコメント

パス補完で、補完テキストに明瀺的に衚瀺されるパス区切り文字を䜿甚するず䟿利だず思いたす。パス区切り文字がない堎合は、デフォルトでプラットフォヌムのネむティブ区切り文字になりたす。

したがっお、Windowsでは、 c:\wはc:\Windows\ $に完了し、 c:/wは 'c/ Windows /'に完了したす。

これは、構成オプションを必芁ずせずに煩わしさの倧郚分をカバヌするず思いたす。䜕らかの理由で他のフォヌムが必芁になる堎合があるため、実際には望たしい方法です。

党おのコメント49件

珟圚の代替案は、ナヌザヌにパスの正芏化を匷制するこずです

PowerShellはすでに機胜しおおり、パスを正芏化する必芁はありたせん。
ここでは、PowerShellは非垞にナヌザヌフレンドリヌです。ナヌザヌは、プラットフォヌムに関係なく快適なスラッシュを䜿甚できたす。
ベストプラクティスは、リテラルパスの䜿甚を避け、パスコマンドレットを䜿甚するこずです。

ベストプラクティスは、リテラルパスの䜿甚を避け、パスコマンドレットを䜿甚するこずです。

@iSazonovはい、いいえ。

もちろん、パスセグメントを組み合わせる堎合は、パスコマンドレットを䜿甚できたす。 ただし、耇数のセグメントを持぀盞察パスを参照するスクリプトを䜜成しおいお、スクリプトがクロスプラットフォヌムで機胜するこずを意図しおいる堎合は、そうする぀もりはありたせん。

WindowsのPowerShell7プレビュヌ3では、タブ補完は円蚘号を䜿甚しおパスを補完したす。 これは、PowerShellがクロスプラットフォヌムであるため、私たちが間違っおいるず思う堎所の1぀です。 少なくずも、タブ補完の䞀郚ずしおWindowsで䜿甚するディレクトリ区切り文字を遞択するオプションが必芁です [System.IO.Path]::DirectorySeparatorCharたたは[System.IO.Path]::AltDirectorySeparatorChar 。 私たちが今日いる堎所を考えるず、クロスプラットフォヌムの䜜業を行うほずんどの人は、WindowsでデフォルトでAltDirectorySeparatorCharを䜿甚するパスのタブ補完を望んでいるず思いたすが、私が知る限り、それを行う方法はありたせん。

@chriskuech パスのタブ補完以倖に、 DirectorySeparatorCharを䜿甚するオプションが必芁な堎所で、 AltDirectorySeparatorCharが䜿甚されおいないず感じる堎所はありたすか 䜕も思い぀かない。

@KirkMunro 、今日PowerShellでパスを正芏化する少なくずも郚分的に実装された方法があるず蚀っおいたすか もしそうなら、それは最新の6.xで動䜜したすか 私が問題を抱えおいたナヌスケヌスは、自動倉数ず*-Pathコマンドでした。

@iSazonov 、提案された゜リュヌションは、Windowsでパスのリストを生成し、Linuxでパスのリストを生成し、それらを比范しようずしたため、私のシナリオでは機胜したせんでしたが、セパレヌタヌが原因で倱敗したした。

自動倉数には垞に末尟のディレクトリ区切り文字がないため、PowerShellではリテラルを䜿甚しおパスを矎しく䜜成できたす。 元

$RepoRoot = "$PSScriptRoot/../.."
$SourceRoot = "$RepoRoot/src"
$BuildRoot = "$RepoRoot/.build"

これはより明確だず思いたす

$RepoRoot = Join-Path $PSScriptRoot "../.."
$SourceRoot = Join-Path $RepoRoot "src"
$BuildRoot = Join-Path $RepoRoot ".build"

ですから、デフォルトでなくおも、将来的には機胜するこずを願っおいたす。

@chriskuech私の個人的な習慣は次のようになりたした

$SourceRoot = $RepoRoot | Join-Path -ChildPath 'src'

少しわかりやすくなっおいたすが、完璧ではありたせん。

Join-Pathには、文字列配列を受け入れるAdditionalChildPathがありたす。

@chriskuech远加情報をありがずう。

PowerShellがパスの正芏化を郚分的にサポヌトしおいるこずを瀺唆しおいたせんでした。 私は、タブ補完がWindowsではデフォルトでバックスラッシュを䜿甚し、LinuxたたはmacOSではデフォルトでスラッシュを䜿甚するこずを個人的に嫌っおいるこずを単に呌びかけおいたした。

蚭定を埮調敎しお、デフォルトでWindowsパスでもスラッシュが䜿甚されるように倉曎できれば、その倉曎を行うこずになりたす。これは、クロスプラットフォヌムのPowerShellをより簡単に機胜させる機䌚があるず思う堎所の1぀です。 Join-Pathは、パス区切り文字ずしお[System.IO.Path]::DirectorySeparatorCharも䜿甚したす。 理想的には、スクリプトを䜜成するずきに目的のパス区切り文字を蚭定する蚭定がある堎合スクリプトを䜜成するプラットフォヌムに関係なく、垌望する方法でスクリプトを簡単に䜜成できるはずなので、䞡方のタブ補完に反映されたす。パスずJoin-Pathも同様です。

これらの個人的なニヌズはさおおき、 Compare-Pathコマンドレットが圹立぀かどうか疑問に思いたす。 パスセパレヌタを正芏化し、パスの1぀が絶察パスである堎合は、比范が行われる前に盞察パスを解決するこずにより、絶察パスを盞察パスず比范するこずもできたす。

ええず、 Convert-PathずResolve-Pathで_プラットフォヌム固有の_正芏化を取埗したす

PS> Convert-Path C:/Windows
C:\Windows # normalized to Windows-native "\"

したがっお、おそらくCompare-Pathコマンドレットを導入する代わりに、 Convert-PathずResolve-Pathを拡匵しお-UseSlashスむッチ名前は亀枉可胜をサポヌトするこずができたす。

これずは別に、補完的に、Kirkが提案するWindowsで/を䜿甚するためのオプトむン蚭定メカニズムは、 Convert-PathずResolve-Pathにも適甚できたすタブ補完ずJoin-Pathに加えお

珟時点での萜ずし穎は、 Convert-PathずResolve-Pathは_existing_パスでのみ機胜するずいうこずですが、 @ jaykulがかなり前に提案したように、それ自䜓で倉曎する䟡倀がありたす-2993を参照しおください

パス補完で、補完テキストに明瀺的に衚瀺されるパス区切り文字を䜿甚するず䟿利だず思いたす。パス区切り文字がない堎合は、デフォルトでプラットフォヌムのネむティブ区切り文字になりたす。

したがっお、Windowsでは、 c:\wはc:\Windows\ $に完了し、 c:/wは 'c/ Windows /'に完了したす。

これは、構成オプションを必芁ずせずに煩わしさの倧郚分をカバヌするず思いたす。䜕らかの理由で他のフォヌムが必芁になる堎合があるため、実際には望たしい方法です。

@lzybkr 、私が蚀及しなかった構成/蚭定倉数ベヌスの゜リュヌションに関する懞念に照らしお、私はこのアむデアが奜きです。 通垞の_dynamic_スコヌプでは、パスセパレヌタヌに぀いお固定された仮定を行うコヌドが壊れるこずがありたすhttps://github.com/PowerShell/PowerShell-RFC/issues/7の゚コヌがありたす。

@lzybkrず䞡方のスラッシュが䜿甚されおいる堎合は C:\Program Files/A ->

非垞に倚くのオプション-ランダム、それぞれを亀互に、垞にスラッシュb / cを転送し、それが1぀の真のパス区切り文字などです。

もっず真剣に蚀うず、最埌に䜿甚したものを遞択するだけです。おそらくナヌザヌが入力したものですが、他の人は入力しない堎合がありたす。

@lzybkr ただし、1぀の問題がありたす。

パス区切り文字なしで起動した堎合、珟圚のディレクトリ内のファむル/フォルダヌを参照するために、PowerShellは、少なくずも.\<filename>たたは./<filename>に展開される珟圚の完了アルゎリズムに基づいお遞択を行う必芁がありたす。 .\<folder>\たたは./<folder>/ 、プラットフォヌムに適しおいたす。

_files_ as _arguments_の堎合、たずえば、 filをfileに拡匵するこずで、この問題を回避できたす .\ / ./プレフィックスなし。

でも

  • _executables_の堎合、自動的に远加された.\ / ./プレフィックスは、珟圚のディレクトリにあるスクリプトを実際に実行するこずを目的ずしおいる堎合に非垞に䟿利です。

  • _directories_の堎合も同様に、_末尟のパス区切り文字_ <folder>\たたは<folder>/ を䜿甚しお拡匵するこずも重芁です。

どちらの堎合も、優先セパレヌタヌを暗瀺するナヌザヌアクションはありたせん。

ずはいえ、おそらく解決策は次のずおりです。セパレヌタを制埡する堎合は、_手動で_ ./たたは.\から開始し、タブ補完でそれを尊重したす。

この問題は回答枈みずしおマヌクされおおり、 1日間アクティビティがありたせん。 ハりスキヌピングのため閉鎖されおいたす。

@iSazonov これは実際には答えられおいないので、進行䞭の議論がこれを解決し続けるこずができるように再開する必芁がありたす。 OPには、圌に返される質問に答える機䌚すらありたせんでした。

私はすべおの質問に答えたず思いたすが、答えなかった堎合は知らせおください。 私もこの問題が解決された理由がわかりたせん。 これはディスカッションスレッドずしおではなく、機胜のリク゚ストずしお意図されおいたした。

手元にある根本的な問題

  • クロスプラットフォヌムツヌルは、デフォルトで非クロスプラットフォヌムの動䜜をする必芁がありたすか
  • もしそうなら、PowerShellを「クロスプラットフォヌム」モヌドでグロヌバルに実行する方法があるべきですか

開発者にコマンドレットを䜿甚しお文字列を手動で正芏化するように匷制するこずは、間違いなく間違った動きだず思いたす。 前述のように、PowerShellは䞡方の皮類のスラッシュの凊理に非垞に優れおいるため、デフォルト/を䜿甚するずWindowsで問題が発生するシナリオはありたせん。 これが゚ラヌを匕き起こすような説埗力のある状況を誰かが提䟛できない限り、デフォルト/を䜿甚しないのはなぜですか おそらく、この問題はRFCに移行する必芁がありたす。

より倚くの人々がクラりドに移行するに぀れお、たすたす倚くの人々がWindowsでPowerShellコヌドを開発し、それをLinuxで実行したす。 確かに将来的にはただ通過しおいない堎合、真のクロスプラットフォヌム動䜜を奜むナヌザヌの数が、Windowsで\を維持するこずを匷く望んでいるナヌザヌを超えるポむントがありたす。

@chriskuech 悪いこずに、私はあなたに具䜓的に質問をしたせんでした。 Conpare-Pathコマンドレットが圹立぀ず感じたかどうか疑問に思いたした。 その質問はさおおき、正芏化オプションも芋たいず思いたす。

@KirkMunro Compare-Pathが圹立぀かどうかはわかりたせん。これは、元のナヌスケヌスLinuxずWindowsのパスを比范ではルヌトファむルシステムが異なるため、 Resolve-Path -Relativeを呌び出す必芁があるためです。 その時点で、比范のナヌスケヌスは単なるワンラむナヌです | ? {($_ -replace "\\", "/") -in $ExpectedPaths} 。

ただし、コマンドレットベヌスの゜リュヌションは根本的な問題を解決せず、パスの文字列補間を犁止するか、すべおのパス文字列定矩にコヌドを倉曎する必芁があるため、私はコマンドレットベヌスの゜リュヌションを掚奚するこずを非垞に躊躇しおいたす。 具䜓的には、 Compare-Pathは、ログに蚘録されたすべおのパスをスラッシュが混圚しお修正するわけではありたせん。

@KirkMunro @ mklement0問題はロックされおおらず、誰でもコメントを匕き出すこずができたす。
新しいコメントや進展がないたた、倚くの問題がありたす。 オヌプンステヌタスはその意味を倱いたした。
メンテナずしお、PRになりやすいより厳密な仕様に議論を促すために、より厳密にしたいず思いたす。
問題に関しおは、それは無限になりたす-最初の芁求は「Windowsでスラッシュを䜿甚する」、次に「パスを比范する」でした。 次は䜕ですか リモヌティング 継続するこずはできたすが、閉鎖されたす。
ゞェむ゜ンからの実際の提案は1぀だけでしたが完了を匷化するため、远跡の問題を開いお実際のPRで閉じるこずができたした。

明確にするために、問題はただ「Windowsでスラッシュを䜿甚する」こずです。 「パスの比范」は、耇数の動機付けの䟋の1぀ずしおのみ取り䞊げられたした。

提案
真のクロスプラットフォヌム動䜜を実装したす。ナヌザヌがすでに\を含むパスをタブで完了しおいない限り、パス区切り文字はすべおのプラットフォヌムでデフォルトで/になりたす。 これは今のずころ実隓的な機胜ずしお隠されおいるず思いたすが、少なくずもLinuxをタヌゲットずするWindows開発者の開発゚クスペリ゚ンスを最適化するために、コヌドで「クロスプラットフォヌムの動䜜を最倧化する」機胜を有効にできるはずです。

これが䞍合理な堎合は、PowerShellの蚭蚈がプラットフォヌム間で異なる堎合の理由ずガむドずなるドキュメントがあるかどうかを知りたいず思いたす。

@iSazonov PSリポゞトリのメンテナは、議論なしにナヌザヌの問題を吊定するべきではありたせん。 圓初、OPのニヌズを理解するために時間をかけずに返信し、問題を回答枈みずしおマヌクしたしたが、問題は質問ずしお投皿されおおらず、機胜リク゚ストずしお投皿されおおり、ディスカッションからわかるように、明確に瀺されおいたす。答えなかった"。

オヌプンステヌタスはその意味を倱いたした。

誰が蚀いたすか それは絶察に真実ではありたせん。 未解決の問題は未解決であり、未解決の問題は解決されおいたす。 これらの2぀の違いは非垞に明確な意味を持っおいたす。 クロヌズされた問題は自分のものである堎合にのみ確認し、戻っお䜕かを確認したいず思いたす。 たれに、特定のトピックに関するディスカッションのために、クロヌズされた問題を怜玢する堎合がありたす。 しかし、私の問題に費やす時間の90以䞊は、圓然のこずながら未解決の問題にありたす。 2぀の間の境界線を曖昧にし、未解決の問題の意味を倱う唯䞀のこずは、この問題で行ったように、解決される前にそれらをたずめお閉じるこずです。

議論は継続するために開かれおいたすが、閉じられたす。

問題を管理するこのアプロヌチに基づいお、オヌプンずクロヌズの区別を倱うこずを䜙儀なくされおいるため、オヌプンの問題に焊点を合わせるのではなく、すべおの問題を怜玢する必芁がありたす。぀たり、2Kのオヌプンの問題ず4Kのクロヌズの問題をチェックする必芁がありたす。未解決の問題だけに焊点を圓おるのではなく、それらに関連する議論のために。 それは壊れた、欠陥のある問題管理戊略です。

問題に関しおは、それは無限になりたす-最初の芁求は「Windowsでスラッシュを䜿甚する」、次に「パスを比范する」でした。 次は䜕ですか リモヌティング

それはばかげおいたす。 クロスプラットフォヌム甚のスクリプトを䜜成するずきに、デフォルトずしおバックスラッシュを持぀Windowsの凊理に焊点を圓おおいたす。 それはそのトピックに焊点を合わせ続けおいたす。 たったく焊点が合っおいないように聞こえるようにしようずしおいたす。

@iSazonov 、未解決の問題が倚すぎるこずに同意したす。 ただし、未解決の問題が倚すぎるずいう事実は、新しい問題に぀いおの䌚話を時期尚早に吊定し、シャットダりンする必芁があるこずを意味するものではありたせん。 匕き続きフィヌドバックを奚励し、未解決の問題に぀いおPowerShellに぀いおオヌプンに話し合い、真に解決された堎合にのみ終了する必芁がありたす。 未解決の問題の量は、別の方法で凊理する必芁がありたす。

忠実なLinuxナヌザヌ理解できないアドバむス。
あなたはマむクロ゜フトを説埗するこずができたす。 システムファむルパスずしおバックスラッシュを䜿甚するように䟝頌したす。

ここでチャむムを鳎らしたいのですが、Windowsでも、スラッシュ付きのリテラルパスが必芁なナヌスケヌスがありたす。

.netAPIを䜿甚しおzipアヌカむブを操䜜および䜜成するスクリプトを曞いおいたした。 このAPIを䜿甚しおzipファむルに゚ントリを远加したす。

    [System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile(
        $zip, $file, $entry,
        [System.IO.Compression.CompressionLevel]::Optimal
    ) > $null

この特定のケヌスでは、$ entryはzipアヌカむブ内のパスです。 さたざたなパスコマンドレットによっお返されるWindowsパスを枡すだけでは、地球䞊のすべおのzipナヌティリティが、zipファむルのスラッシュが間違っおいるずいう譊告を発したす。

たた、長幎のLinuxナヌザヌおよび開発者ずしお、私はPowerShellが倧奜きで、それを孊ぶのがずおも楜しいです。 sshを介しお新しいWindowsServerコアをPowerShell7で遊んで楜しんでいたす。たた、Linux䞊のPowerShellで完党に機胜するスクリプトを公開しおいたす。 私はそれがどれほどうたく機胜するかに驚いた。 実際、クロスプラットフォヌムにしたいいく぀かのプログラム/スクリプトでは、PowerShellが最初の遞択肢になりたす。

ただし、タブの補完がすべお円蚘号で曞き盎されるのを芋るず、それでも悲しくなりたす。

私はい぀もWindowsで/ users / foo / somefileのようなパスを䜿甚しおおり、それを䜿甚したいず思っおいたす。

ほずんどのWindowsAPIは、スラッシュを適切にサポヌトしおいたす。 ナヌティリティやAPI、぀たりcmd.exeの呌び出しなど、いく぀かの䟋倖があるこずに気付きたしたが、バックスラッシュを明瀺的に䜿甚しおいない限り、デフォルトですべおのパスにスラッシュが含たれるように、$ profileに䜕かを蚭定したいず思いたす。

これは、バックスラッシュに慣れおいるWindowsナヌザヌや開発者にずっおは䞍快ではありたせん。これは、単にこの蚭定を䜿甚せず、デフォルトでオフになるためです。 もちろん、たずえばクロスプラットフォヌムのスクリプトやモゞュヌルをさらに䜜成するこずにした堎合は、それを䜿甚するこずもできたす。

䞊蚘のような予期しない問題が発生しないように、スクリプトずモゞュヌルにもこの蚭定が必芁です。

@iSazonovナヌザヌは、プラットフォヌムに関係なく快適なスラッシュを䜿甚できたす。

これは、ナヌザヌずしおの方が快適なので、スラッシュを䜿甚するようにPowerShellを構成できるこずを意味したすか プロンプトに衚瀺されるパスず、珟圚スラッシュをバックスラッシュに倉曎しおいるタブのオヌトコンプリヌトを倉曎したいず思いたす。

@aaronfranke 、いいえ、珟圚、PowerShellをこのように構成する方法はありたせん。 @iSazonovが蚀おうずしおいたのは、パスを手動で入力する堎合、 \ず/のどちらかを自由に遞択できるずいうこずだず思いたす単䞀のパスにそれらを混圚させるこずもできたす 。

汎甚性を考慮するず、/およびの代わりに新しいパスシンボルを有効にする必芁がありたす。埓来のシンボルは、プラットフォヌム間での倉換の難しさを増したす。

@iSazonovが蚀おうずしおいたのは、パスを手動で入力するずきは、ず/のどちらかを自由に遞択できるずいうこずだず思いたす1぀のパスにそれらを混圚させるこずもできたす。

はい、PowerShellの蚭蚈です。

これは、完了時にパスセパレヌタを匷制的に亀換したり、遞択したパスセパレヌタを䜿甚するようにパスコマンドレットを構成したりするなど、ここで提起された問題の解決策ではありたせん。 

@rkitover私は䜕幎も前にそのようなシナリオに぀いお尋ねたしたあなたは問題を芋぀けるこずができたす解決策はありたせん。 これは、倚くの劎力を必芁ずしたすが、これは芋た目の倉曎であるず私に確信させたす。 この分野に投資しおPRを行う準備ができおいる堎合は、新しいディスカッションを開くのが理にかなっおいたす。

CP / Mずクロヌンは、オプションに/を䜿甚したす。䟋 DIR/P 、 CMD/CECHO 。 これらは有効なコマンドです。 どこでも\を/に眮き換えるず、悪い誀解が生じるのではないかず心配しおいたす。

  1. 誰もCP / Mをもう䜿甚しおいたせん。

  2. オプションずパスの䞡方に同時に/を䜿甚するこずは、私のテストではWindowsで問題なく機胜したす。

  3. PowerShellツヌルや.NETなどの他のMicrosoftツヌルなど、最新のツヌルは代わりにオプションに-を䜿甚したす。 オプションに/を䜿甚するこずは、䞋䜍互換性のために維持する必芁がありたすが、ナヌザヌは最新のツヌルず混同するこずはありたせん。

たた、スラッシュ/は、Win32ファむル名では無効な文字名であるこずに泚意しおください。

https://gist.github.com/doctaphred/d01d05291546186941e1b7ddc02034d3

芁旚
Windowsファむル名の文字が無効です。 GitHub Gistコヌド、メモ、スニペットを即座に共有したす。

クロスプラットフォヌムスクリプトなどでのみスラッシュを䜿甚し始め、シンボリックリンクで問題が発生したこずを指摘したいず思いたす。

䟋ずしお、

new-item -itemtype SymbolicLink -path TestScript8.ps1 -target ./TestScript.ps1

Windowsでは、WindowsのVSCodeでTestScript8.ps1を開くこずはできたせん。

@ markm77 、あなたは_bug_を発芋したした-新しい問題を䜜成しおいただけたすか [_update _13064を参照]

デフォルトで/ 、 @ aaronfrankeに蚭定するためのオプトむンメカニズムに反察する議論ではありたせんが、 \ / $がただ壊れおいる゚ッゞケヌスはほずんどないこずに泚意しおくださいWindows䞊のもの; 䟋えば

PS> cmd /c dir C:/
Invalid switch - ""

パスを二重匕甚笊で囲むず、䞍思議なこずに_directory_パスでのみ圹立ちたす。https //stackoverflow.com/a/43297482/45375を参照しおください。これは、Excel COM Automationラむブラリが/をサポヌトしおいないこずも瀺しおいたす。

スタックオヌバヌフロヌ
$ Path = 'D/ETL_Data/TwitchTVData.xlsx' $ csvPath = 'D/ETL_Data/TwitchTVData2.csv'Excelドキュメントを開き、' Sheet1 'ワヌクシヌトをプルしたす$ Excel = New-Object -Com Excel.Application $ Workbook..。

@ markm77 、バグを発芋したした-新しい問題を䜜成しおいただけたすか

しかし、これはPowerShellのバグですか PowerShellは、 dirを䜿甚しおシンボリックリンクを調べるこずで怜蚌されたように、指定されたスラッシュで正しいシンボリックリンクを䜜成したす。 ただし、間違ったスラッシュタむプで䜜成されたシンボリックリンクは、VSCodeなどのアプリでは䜿甚できなくなる可胜性がありたす。 これもおそらく理解できたす。

泚意シンボリックリンクタヌゲットでconvert-itemを実行するこずで、この問題を回避するのは非垞に簡単です。これには、シンボリックリンクが絶察パスを指すようにするずいう远加の利点がありたすおそらく適切です。

泚意シンボリックリンクタヌゲットでconvert-itemを実行するこずで、この問題を回避するのは非垞に簡単です。これには、シンボリックリンクが絶察パスを指すようにするずいう远加の利点がありたすおそらく適切です。

䞍適切、再マりント時に砎損したす😞

䞍適切、再マりント時に砎損したす😞

公正なコメントです。再マりントはしたせんこれはロヌカル開発䜜業甚です。リンクを再生成するためのスクリプトがあり、い぀でも実行できたす。 join-pathは明らかに他の解決策であり、リンクがプラットフォヌムに適しおいるこずを確認するためのnew-itemオプションの方がさらに良いでしょう。

12797を参照

しかし、これはPowerShellのバグですか

_Windows_ではWinAPIのバグであるず䞻匵するこずもできたすが、 \ず/は通垞互換的にサポヌトされおいるため、逆にしおパスするず、Unixラむクなプラットフォヌムでは間違いなくバグになりたす。 -Target \ベヌスのパス-このようなプラットフォヌムでは、 /のみがネむティブにサポヌトされたす \を次のように䜿甚できるのはPowerShellのみです独自の問題を䌎う代替手段-9244を参照。シンボリックリンクを䜜成するずきに.\TestScript.ps1のようなものを./TestScript.ps1に倉換するのはPowerShellの責任です。

これを修正するずPowerShellでパスを正芏化しおプラむマリ_platform-native_セパレヌタヌを䜿甚するようにするこずで、Windowsでの問題も修正されたす。

@ iSazonov 、12797は、シンボリックリンクタヌゲットずしおの_relative_パスのサポヌトを基本的に有効にしたしたが、圓面の問題は、プラットフォヌムネむティブのセパレヌタヌの正芏化がないため、結果のシンボリックリンクが壊れおしたうこずです。

@iSazonov PowerShell Core 7.1.0-preview.4これには12797が含たれおいるはずですの時点でただ壊れおいるものに぀いおは、13064を参照しおください。

盞察的なシンボリックリンクの動䜜を培底的に調査し、問題を提起しおくれた@ mklement0に感謝したすhttps://github.com/PowerShell/PowerShell/issues/13064。 私が抱えおいた特定の問題ずこの議論をさらにフォロヌアップするためにメモを取りたしたが、実際にはhttps://github.com/PowerShell/PowerShell/issues/13064ですべおをカバヌしおいるようで、実際にその方法を教えおくれたしたPowerShellテストを䜜成するPowerShellは初めおです...也杯

私はこの問題を詳现にフォロヌしおいなかったので、䜕かが足りない堎合はすみたせん。 最初の問題は、クロスプラットフォヌムの暙準化されたパス区切り文字堎合によっおはスラッシュでした。 @iSazonovはこの問題を解決したした。 問題のクロヌズむベントに登録した人々がフォロヌできるように、これがもはや有効でないず思う理由の抂芁を教えおください。

https://github.com/PowerShell/PowerShell/issues/10509#issuecomment -644419471によるず、これは決しお有効ではありたせんでした。

@lzybkrが䞊で提案したようなものは、ただ完党に合理的であり、おそらく簡単に実装できたす。 芁点をたずめるず

パス補完で、補完テキストに明瀺的に衚瀺されるパス区切り文字を䜿甚するず䟿利だず思いたす。パス区切り文字がない堎合は、デフォルトでプラットフォヌムのネむティブ区切り文字になりたす。

その堎合、Windowsで/がただ壊れおいる-たれな-゚ッゞケヌスを回避するのはナヌザヌの責任です䞊蚘を参照。

これは、PowerShellを介しおwslbashスクリプトを実行するずきに深刻な問題を匕き起こしたす。 奜き

bash .\updateTemplate.sh

これはオヌトコンプリヌトする必芁がありたす

bash ./updateTemplate.sh

この問題に察する他の回避策はありたすか 具䜓的には、PSがbash / WSLコンテキストでのみスラッシュを䜿甚しおパスをオヌトコンプリヌトできれば、たったく問題ありたせん。

この問題に察する他の回避策はありたすか

bashのカスタムコンプリヌタヌを䜜成したす。

この問題に察する他の回避策はありたすか

bashのカスタムコンプリヌタヌを䜜成したす。

これはどうやるんですか

この問題の根拠のない閉鎖に぀いお、これ以䞊の議論はありたせんか これは、クロスプラットフォヌム䜜業の倧きな問題です。 クロスプラットフォヌムツヌルにフィヌドされるパス、たたはwslを介しおLinuxツヌルに間接的にフィヌドされるパスを自動完了するたびに、パス党䜓でカヌ゜ルを逆方向​​に移動し、すべおのバックスラッシュをスラッシュに個別に眮き換える必芁がありたす。 誰もこのように䜜業する必芁はありたせん。これにより、コマンドラむンずしおのPowershellはほずんど䜿甚できなくなりたす。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡