私はperlスクリプトを実装しようとしています。私は実行ファイルのディレクトリを取得する必要があります。Perl `dirname`がフルパスの代わりにドットを出力します
たとえば、私が実行しているファイルがC:\Scripts\MyScript.pl
にある場合は、C:\Scripts
を取得したいと考えています。
私はdirname
を試しましたが、私がしたいことをしていないようです。それはちょうど私が私が一緒にdirname
とabs_path
を使用する必要があることを理解.
を印刷し、それはいくつかのUNIX探してディレクトリを返した後、明らかに最終的に無効なパスで実際のパスでそれを連結しているため、しかしabs_path
は、私にはバグだらけです。
私の概念証明です。
# The initial variable with file
say $0; # C:\Users\sed\AppData\Roaming\npm\node_modules\my-test-module\my-test-file
# This is just a current directory
say dirname($0); # .
# This looks like a bug to me, the shell is opened in C:/Users/sed so it is related
say abs_path($0); # /c/Users/sed/C:/Users/sed/AppData/Roaming/npm/node_modules/my-test-module\my-test-file
# This is what I need, except I don't need that first UNIX looking part
say dirname(abs_path($0)); # /c/Users/sed/C:/Users/sed/AppData/Roaming/npm/node_modules/my-test-module
Windows以外のビルドの 'perl'を使っているように見えるとき、' $ 0'はWindowsのパスです。 'perl -v'の最初の行は何ですか? – ikegami
それはWindowsのビルドのようだ。 'これはx86_64-msys-thread-multi用に構築されたperl 5、version 24、subversion 1(v5.24.1)です。 – sed
いいえ、それはmsysビルドであり、Windowsビルドではありません。 msysはUNIXエミュレーション環境です。 (Windowsのビルドは 'x86_64-msys'の代わりに' MSWin32-x64'で始まります)。 – ikegami