Bashを使用して絶対パスを相対パスとして確認する

Bashを使用して絶対パスを相対パスとして確認する

次の単純なbashスクリプトがあるとしましょう。

#!/usr/bin/env bash

file="$1";

if [ -z "$file" ]; then
    echo "Must pass relative file path as the first argument.";
fi

git_root=`git rev-parse --show-toplevel`;

#  => need to resolve file from an absolute path to relative path, relative to git root

git diff HEAD:"$file" remotes/origin/dev:"$file"

このスクリプトに絶対パスを渡す場合は、それを処理できる必要があります。これを行う正式な方法は何ですか?絶対ファイルパスであることを確認するには、最初の文字が「/」であることを確認できますか?

ベストアンサー1

私はMacOSを使用しているので、coreutilsをインストールする必要があります。

brew install coreutils

これにより、次のようにrealpathを使用できます。

file=`realpath --relative-to="$git_root" "$file"`

あるいは、何もインストールせずに実行する必要がある場合は、次のnode.jsスクリプトを使用できます。

#!/usr/bin/env node
'use strict';

const path = require('path');

const file = process.argv[2];
const relativeTo = process.argv[3];

if (!relativeTo) {
  console.error('must pass an absolute path as the second argument.');
  process.exit(1);
}

if (!file) {
  console.error('must pass a file as the first argument.');
  process.exit(1);
}

console.log(path.relative(relativeTo, file));

おすすめ記事