次の単純な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));