ファイルOS Xの絶対パスを取得する

ファイルOS Xの絶対パスを取得する

ユーザーにファイルの場所を尋ねるプロンプトを表示し、それを絶対パスに変換するスクリプトを作成しています。

これが私が今まで持っているものです。これをどのように接続するのかわかりません。

もちろんです。

read -e -p "Enter a path to a file: " PATH
CONVERTPATH="$(pwd $PATH)" "/" "$(basename $PATH)"
echo Absolute path is $CONVERTPATH

答え1

~のため追加、追加の引用符を削除するだけです。

CONVERTPATH="$(pwd $PATH)" "/" "$(basename $PATH)"

到着

CONVERTPATH="$(pwd $PATH)/$(basename $PATH)"

しかし、いくつかの問題もあります。

  • pwd引数は許可されません。dirname指定された場合は引数を使用できます。
  • このコマンドは名前を次のようにread設定しません。PATHname
  • コマンドechoは完全に引用されていません。

そしてそれら修正すると、次のような結果が得られます。

#!/bin/bash
read -e -p "Enter a path to a file: " name
CONVERTPATH="$(dirname $name)/$(basename $name)"
echo "Absolute path is $CONVERTPATH"

誰かが変数を使用してプロンプトに応答する状況は処理しません。また、意図した用途はpwd絶対ディレクトリを取得する可能性が最も高いです。さらに交換してみてください。

#!/bin/bash
read -e -p "Enter a path to a file: " name
head=$(dirname "$name")
head=$(cd "$head" && pwd)
CONVERTPATH="$head/$(basename $name)"
echo "Absolute path is $CONVERTPATH"

しかし、それでもやりたいことはありません。考える。 (あなたの観点から見ると)問題は、pwdOSXでは、システムがコマンドのシンボリックリンクに基づいた結果のみをエコーすることですcd。これはOSXの珍しい現象ではなく、たとえばエントリチェーンに沿って正しい操作を実行するためにcd権限なしでディレクトリに入ることを可能にする長いUnix動作です。pwd..

結果にシンボリックリンクが含まれていない絶対パス名が必要な場合は、別のアプローチを取る必要があります。 OSXではrealpath- しかし、コマンドラインにはありません。他のシステムでは利用可能readlink -fしかし、ここではありません。

このトピックに関する一般的な議論:

関連情報