テスト環境では、ログファイルのディレクトリ構造は次のとおりです。
/var/Logs/int/app-id/region-code/log/file-name.log
/var/Logs/sat/app-id/region-code/log/file-name.log
/var/Logs/cat/app-id/region-code/log/file-name.log
環境ごとに多くのアプリケーションIDがあり、アプリケーションIDごとに複数の地域コードがあります(アプリケーションによって異なります)。
ディレクトリをintからsatに変更し、パスの残りの部分をすべて同じに保つことができるコマンドはありますか?このように:
$ pwd
/var/Logs/int/abc/01/log
$ cdswap int sat
$ pwd
/var/Logs/sat/abc/01/log
$ cdswap abc def
$ pwd
/var/Logs/sat/def/01/log
これがうまくいけばいいでしょう。
$ cdswap def/01 ghi/02
$ pwd
/var/Logs/sat/ghi/02/log
そのようなコマンドがない場合は、同じ操作を効果的に実行するようにエイリアスを設定できますか?どうですか?
ご協力ありがとうございます!
ベストアンサー1
cdswap
zsh では、cd
.... 2 つの引数が指定されたら、cd
現在のディレクトリの最初の引数を 2 番目の引数に置き換え、結果ディレクトリに変更します。
cd
関数を作成してbashでこれをシミュレートできます。
cd () {
local i=1
while [[ "${!i}" = -* ]]; do ((++i)); done
if ((i == $# - 1)); then
local operands
operands=("$@")
operands[$i]=${PWD/${!i}/${!#}}
if [[ "${operands[$i]}" == "$PWD" ]]; then
echo >&2 "cd: string not in pwd: ${operands[$i]}"
return 1
fi
set -- "${operands[@]:$(($#-1))}"
fi
builtin cd "$@"
}