web-dev-qa-db-ja.com

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

ユーザーにファイルの場所を入力するように求め、それを絶対パスに変換するスクリプトを作成しています。

これは私が今まで持っているものです。これらを一緒に追加する方法がわかりません。

absolute.sh

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

appendingの場合、必要なのは余分な引用符を取り除くことだけです。たとえば、変更

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

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

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

  • pwdは引数を取りません。提示されたケースではdirnameを使用できます。
  • readコマンドはPATHを設定しません。名前を、たとえばnameに変更します。
  • echoコマンドが不完全に引用されています

those修正すると、次のようになります。

#!/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"

ただし、それでも、wantを実行することはできません。問題(あなたの観点から)は、OSXのpwdが、cdコマンドからのシンボリックリンクをたどることに基づいて結果を単にエコーすることです。これは単なるOSXの癖ではありませんが、たとえば..エントリのチェーンをたどることにより、適切なcdを実行する権限のないディレクトリにpwdを許可する長年のUnixの動作です。

結果にシンボリックリンクがない絶対パス名が必要な場合は、別の方法が必要です。 OSXには realpath —がありますが、コマンドラインにはありません。他のシステムでは readlink -f を使用できますが、ここでは使用できません。

このトピックに関する一般的なディスカッション:

6
Thomas Dickey