[解決済み】シェルスクリプトのシンボリックリンクを解決する方法
2022-04-04 06:25:24
質問
Unix系システムで)絶対パスまたは相対パスが与えられたとき、中間シンボリックリンクを解決した後のターゲットのフルパスを決定したい。ボーナスポイントは、同時に~ユーザー名表記を解決することです。
ターゲットがディレクトリの場合、ディレクトリに chdir() してから getcwd() を呼び出すことができるかもしれませんが、私はこれを C ヘルパーを書くのではなく、シェルスクリプトから行いたいのです。残念ながら、シェルはシンボリックリンクの存在をユーザーから隠そうとする傾向があります(これはOS Xのbashです)。
$ ls -ld foo bar
drwxr-xr-x 2 greg greg 68 Aug 11 22:36 bar
lrwxr-xr-x 1 greg greg 3 Aug 11 22:36 foo -> bar
$ cd foo
$ pwd
/Users/greg/tmp/foo
$
上記の例でtmpディレクトリから実行したときにresolve("foo") == "/Users/greg/tmp/bar"というような関数 resolve() が欲しいのです。
どのように解決するのですか?
規格によると
pwd -P
はシンボリックリンクを解決したパスを返すべきです。
C関数
char *getcwd(char *buf, size_t size)
から
unistd.h
は同じ動作をするはずです。
関連
-
[解決済み] Bashスクリプトのソースディレクトリをスクリプト自体から取得するにはどうすればよいですか?
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] Bashシェルスクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashで通常のファイルが存在しないかどうかを判断する方法を教えてください。
-
[解決済み] シェルで、「2>&1」はどういう意味ですか?
-
[解決済み] Bashスクリプトからプログラムが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashで文字列をデリミターで分割するには?
-
[解決済み] Git はシンボリックリンクをどのように扱うのですか?
-
[解決済み] LinuxのシェルスクリプトでYes/No/Cancelの入力を促すにはどうしたらいいですか?
-
[解決済み] Bashシェルスクリプトの入力引数の存在確認
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Bashのif条件で「unary operator expected」エラーが発生する。
-
[解決済み】 '\r': コマンドが見つかりません - .bashrc / .bash_profile [重複].
-
[解決済み】shでJenkinsのステージから他のステージに変数を渡す
-
[解決済み] find -exec cp {} でエラー 'find: missing argument to -exec' が発生した場合の解決策。TARGET_DIR + [閉店]。
-
[解決済み] configureコマンドが見つからない cygwin
-
[解決済み] awk で行を飛ばすにはどうしたらいいですか?
-
[解決済み] MacでGNUのreadlink -fの動作を得るにはどうしたらいいですか? [クローズド]です。
-
[解決済み] findコマンドと一緒に使用するとエラー 'rm: missing operand' が発生する。
-
[解決済み] 環境変数を表示/エコーするには?
-
[解決済み] dockerコンテナでホストディレクトリをシンボリックリンクでマウントする