ユーザーにファイルの場所を入力するように求め、それを絶対パスに変換するスクリプトを作成しています。
これは私が今まで持っているものです。これらを一緒に追加する方法がわかりません。
absolute.sh
read -e -p "Enter a path to a file: " PATH
CONVERTPATH="$(pwd $PATH)" "/" "$(basename $PATH)"
echo Absolute path is $CONVERTPATH
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
を使用できますが、ここでは使用できません。
このトピックに関する一般的なディスカッション: