2

これは常に何も返しません: readlink $Somevar. "${Somevar}""$Somevar"$Somevar、または${Somevar}- 違いはありません。私は印刷を続けSomevarており、それが妥当な価値を持っていることを知っています。ターミナルで入力$Somevarするだけで(スクリプトをエコー/「デバッグ」して相対パスを取得し、中止すると)、絶対パスが得られます。しかし、スクリプト内で絶対パスを取得できる必要があります。

変数と一緒に readlink を使用することはまったく可能ですか? 率直に言って、変数が渡されていることを readlink がどのように「知っている」のかわかりません。スクリプトでも、 readlink が呼び出される前にシェルによって展開されると思いました。「」を使用してターミナル(sansスクリプト)でテストしました~/_src。それが機能する唯一の方法は、引用符なしでそれを書くことです。しかし、その値を変数に割り当てると、マシン上の他のすべての機能がそれで動作しますが、readlink.

どうすれば絶対パスを取得できますか? readlink を使用してもかまいません。スクリプトで相対から絶対パスを取得したいだけです。


更新:(スタックオーバーフローのコメントが壊れています)

Linux としてタグ付けしました。シンボリックリンクも翻訳したいので readlink をお願いしましたが、別のステップでそれを行っても問題ありません。

また、これも失敗しますABSDIR=`cd $RELDIR; pwd`:

bash: cd: ~/_src/: No such file or directory

(そのようなディレクトリがあり、端末に正確なディレクトリ名を入力すると見つかります。)端末自体によって展開されているとcd推測しています。~/

では、そのようなパスを処理する方法はありませんか? どうやら、これらのパスを処理していると思われるすべてのユーティリティは、ターミナルがパスを呼び出す前にパスを展開するためにのみ機能していました。

4

2 に答える 2

4

まず第一に、readlink は Linux と OSX では少し異なることを行います。bash特に組み込みではなく実行可能ファイルであるreadlinkため、質問に OS ではなくタグを付けることをお勧めします。bash

第二に、絶対パスを取得したい場合、それが質問のタイトルではないのはなぜですか?

ディレクトリの絶対パスを取得する簡単でポータブルな方法は次のとおりです。

ABSDIR=`cd $RELDIR; pwd`

ファイルはもう少し作業です:

ABSFILE=`cd $(dirname $RELFILE); pwd`/`basename $RELFILE`
于 2013-07-08T02:24:27.710 に答える