回答:
pwd
コマンドの代わりに、PWD
変数を使用します(POSIXにもあります)。
fp () {
case "$1" in
/*) printf '%s\n' "$1";;
*) printf '%s\n' "$PWD/$1";;
esac
}
Windowsをサポートする必要がある場合、unixツールの各ポートにはファイルパスを変換するための独自のルールがあるため、絶対パスの認識はより複雑になります。Cygwinでは、cygpath
ユーティリティを使用します。
あなたが今使っているものであなたの質問に答えるために:
エイリアスは、現在入力している位置で展開されます。入力した:
% fp<SPACE>file.ext
これはなる
% echo `pwd`<SPACE>file.exe
あなたはそれを避けるために関数を使用することができます:
function fp() {
echo `pwd`/"$1"
}
通常どおり使用できます:
% fp file.ext
echo "`pwd`/$1"
*
他のファイルを含むディレクトリで呼び出されるファイルで関数を試してください)。
fp *
それが/tmp/4cc3ea0c1b34b
関数の最初のパラメーターであるため、次の値を返します。他のパラメーターは、ディレクトリ内の他のファイルになります。すぐに私は「と呼ばれるファイルを持っているとしてとして期待通り」関数は、まだ「*」または*または*それを呼び出して、作品
次を使用できます。
realpath file.ext
apt-cache search realpath
してcoreutilsおよびプレーンol ' realpathパッケージであることを明らかにできます両方とも含まれています。その後、sudo apt-get install realpath
(またはcoreutils
)を入力してインストールできます。
/programming//a/3915420/5795941から
これは私に受け入れられる唯一の方法です。realpathやreadlinkのようなリンクを展開せず、私がこれまで見てきた古典的な方法です。
#! /bin/sh
echo "$(cd "$(dirname "$1")"; pwd -P)/$(basename "$1")"
readlink -f
(またはrealpath
、互換性のために保持されている古いユーティリティ)は、すべてのシンボリックリンクをさらに拡張しますが、これは必ずしも望ましくありません。