readlink
がある前提であり、正確には「ShellScript
なら」とは言えないか。
bash で ファイルの絶対パスを得る - Qiita コメント:#comment-10d1b710bcf7df114cb7
昔に自分でリンク張っておきながら忘れるんですよね。
readlink コマンド | コマンドの使い方(Linux) | hydroculのメモ
(なので正確には readlink -f
)
そして忘れたまま手動で判定しようと書きかけると、こう詰まる。
function test
# 引数は処理対象ファイルひとつのみ(好きなだけ渡せたほうがいいけど)
if test (count $argv) -ne 1
echo "引数を一つ設定してください" $argv >&2
return 1
end
set file $argv[1]
# 引数で渡したファイルがなければエラー
if test ! -f $file
echo "ファイルを指定してください" $file >&2
return 1
end
# 最初の一文字を見て、ファイル指定を絶対パスか相対(ホームからの)パスかを判定する
set first_str (string sub -l 1 $file)
if test "." = $first_str
echo "相対パス"
# pwdくっつける
else if test "~" = $first_str
echo "ホームからの相対パス"
else if test "/" = $first_str
echo "絶対パス"
else
echo "カレントのファイル"
# pwdくっつける
end
end
やりたかったことは、引数で渡されたファイルの親族?ディレクトリ。
兄弟や親のディレクトリへの操作をしたいと考えた。
mv
やcp
のように移動先を指定せず、一定のルールで処理先を決定させるようなもの。
例えば
/tmp/original/hoge
を
/tmp/original_moved/hoge
に移動させるような。
でも先頭一文字だけでは
.config
などのドットファイルに対応できない。
~hoge
などのファイルも作れるので、
二文字・三文字見て区切り文字まで見なければならないなと考えた。
./
, ../
, ~/
なら相対・ホームパス。
どうにも筋が悪そう。
振り返れば最初に手動で判定しようとしたところから筋が悪いので、絶対パスの取得ぐらいはコマンドで取ろうという考えをすぐに持ちたいところ。
という失敗例でした。
絶対パスがとれたら
dirname
から相対パスで遡って操作できそうと考えています。