Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> LinuxシステムFAQ >> Linuxシステムにおけるパスのファイル名の取得方法

Linuxシステムにおけるパスのファイル名の取得方法

  

本稿では、主にLinuxシステムにおけるパスのファイル名の取得方法について紹介します。コードは次のとおりです。

[[email protected]] #basename /root/aaa/bbb/dabu.txt

表示:

コードは次のとおりです。

dabu.txt#パスのファイル名を取得する

シェルスクリプトでスクリプトファイルのパスを取得する方法

方法1:

コードは次のとおりです。

[[email protected]] #DIR = $(cd" $(dirname" $ 0")"; pwd)

[[email protected]] #echo $ DIR

しかし、このようなdirname" $ 0"のように、sourceコマンドに遭遇すると間違った結果になるでしょう。

方法2:

コードは次のとおりです。

[[email protected]] #echo" $(cd" $(dirname" $ {BASH_SOURCE [0]) ]} ";" "&& pwd)"

上記のコマンドラインを使用すると、スクリプトの絶対ホイール直径を取得できます。

ソフトリンクがある場合は、使用できません。そのため、スクリプトへのソフトリンクを正しく解析するために、次の複数行のコマンドを使用できます。

コードは次のとおりです。

SOURCE =" $ {BASH_SOURCE [0]}" < Br>

while [-h" $ SOURCE"];ファイルがシンボリックリンクにならなくなるまで#resolve $ SOURCEを実行します。

DIR =" $(cd -P" $(dirname"); $ SOURCE ")"&& pwd) "

SOURCE =" $(readlink "$ SOURCE") ""

[[$ SOURCE!= /* ]]&& SOURCE =" $ DIR /$ SOURCE"#$ SOURCEが相対シンボリックリンクの場合は、シンボリックリンクファイルがあるパスを基準にして解決する必要があります。

done

DIR =" $(cd -P" $(dirname" $ SOURCE")"&pwd>)< p>をsource、bash -cコマンドと一緒に使用することもできます。 Br>

ただし、cdを使用してスクリプト内の別のディレクトリに切り替えると、上記のコマンドで上記のコマンドを実行しても正しい結果が得られません。 $ CDPATHトラップに関する記事を参照してください。仕組みを理解するために、次のコードを実行します。

コードは次のとおりです。

#!/bin /bash

SOURCE =" $ {BASH_SOURCE [0] ]}"

while [-h" $ SOURCE"];ファイルがシンボリックリンクでなくなるまで#SOURCEを解決します。

TARGET =" $(readlink" $ SOURCE ")"

if [[$ SOURCE == /*]]; then

echo" SOURCE '$ SOURCE'は、 '$ TARGET'への絶対シンボリックリンクです。 Br>

SOURCE =" $ TARGET>

else< p> DIR =" $(dirname" $ SOURCE")"

echo" SOURCE" '$ SOURCE'は '$ TARGET'への相対シンボリックリンク( '$ DIR'を基準とした相対パス)です。"

SOURCE =" $ DIR /$ TARGET"#$ SOURCEが相対シンボリックリンクの場合シンボリックリンクファイルが配置されていたパスを基準にして解決するには、次の手順に従ってください。

echo" SOURCE is '$ SOURCE'"

RDIR =" $(dirname" $ SOURCE")"

DI R =" $(cd -P" $(dirname" $ SOURCE")"& pwd>)<< p> [" $ DIR"!=" $ RDIR" ]; then

echo" DIR '$ RDIR'は '$ DIR'に解決されます。<

fi

echo" DIRは '$ DIR'" < Br>

Copyright © Windowsの知識 All Rights Reserved