GNU/Linux >> Linux の 問題 >  >> Linux

パス名の .. を bash スクリプトの絶対名に変換する方法は?

試してみてください:

ABSOLUTE_PATH=$(cd /home/nohsib/dvc/../bop; pwd)

あなたが探しているのは readlink です :

absolute_path=$(readlink -m /home/nohsib/dvc/../bop)

注意: GNU の readlink を使用する必要があります 「-m」オプションを提供する実装。 BSD の readlink たとえば、そうではありません。


シンボリックリンクをたどらずにやりたい場合は、 realpath を使ってみてください オプション -s 付き :

$ realpath -s /home/nohsib/dvc/../bop
/home/nohsib/bop

realpath があることに注意してください 、通常は最後のコンポーネントを除くすべてが存在する必要があります。したがって、上記が機能するためには、次のすべてがファイル システムに存在する必要があります:

/home
/home/nohsib
/home/nohsib/dvc

しかし、 -m を使用してその要件を回避できます オプション。

$ realpath -sm /home/nohsib/dvc/../bop
/home/nohsib/bop

(注 realpath すべてのシステム、特に古い非 Debian システムで利用できるわけではありません。組み込み Linux で作業している人にとっては、残念ながら Busybox realpath -s をサポートしていません または -m 切り替えます。)


使用に関する 1 つの問題:

ABSOLUTE_PATH=$(cd ${possibleDirectory}; pwd)

${possibleDirectory} が存在しない場合、ABSOLUTE_PATH は現在のディレクトリに設定されます。これはおそらく、あなたが望むものでも期待するものでもありません.

一般的には、このバージョンを使用する方が望ましいと思います:

ABSOLUTE_PATH=$(cd ${possibleDirectory} && pwd)

${possibleDirectory} が存在しないかアクセスできない場合、ディレクトリ アクセス権限がないために、ABSOLUTE_PATH には空の文字列が含まれます。

これの利点は、状況に応じて、空の文字列をテストするか、自然に失敗させることができることです。 「cd」コマンドが失敗した場合にデフォルトで現在のディレクトリを使用すると、非常に予期せぬ、場合によっては悲惨な結果が生じる可能性があります (例:rm -rf "$ABSOLUTE_PATH" )


Linux
  1. Bashスクリプトをデバッグする方法は?

  2. BashスクリプトをBashにパイプするときにパラメータを設定する方法は?

  3. Awk内のBashスクリプトでBash関数を呼び出す方法は?

  1. Bashスクリプトで文字列を分割する方法

  2. Bashでファイルパスをどのように正規化しますか?

  3. ファイルを bash シェル スクリプトに含める方法

  1. VimでBashスクリプトを強調表示するには?

  2. パスに bash スクリプトを追加する

  3. bash スクリプトを実行するには?