ディレクトリを記憶し、常にルートディレクトリではなくそのディレクトリにCDを移動するスクリプト

ディレクトリを記憶し、常にルートディレクトリではなくそのディレクトリにCDを移動するスクリプト

CDを使用するときは、常にそのディレクトリに変更することを覚えていて、指定されたディレクトリに変更するスクリプトを作成する方法は?

#!/bin/bash
setdir() {
    cd $1
    # remember the directory we are changing to here so whenever we do cd we go back to this set dir
}

setdir "$1"

答え1

次のように動作する必要があります。

setdir() {
    cd "$1"
    export SETDIR_DEFAULT="$1"
}

my_cd() {
    cd "${1-${SETDIR_DEFAULT-$HOME}}"
}

これは別のスクリプトではなく関数であることに注意してください。これを呼び出す親シェルに影響を与える方法がないため、別のスクリプトではこれを行うことはできません。

もしあなたなら本物上書きするにはcd(これをしないでください)cdに置き換えてくださいbuiltin cd

答え2

答えるには少し遅れているかもしれませんが、CDPATH利用可能なアイデアが好きかもしれません。これにより、cdこの変数のディレクトリの内容をどこからでも参照できます。例は次のとおりです。

$ mkdir -p test/{1,2,3}
$ cd test/
$ mkdir 1/{a,b,c}
$ export CDPATH=/tmp/test/1
$ ls
1  2  3
$ cd a
$ pwd
/tmp/test/1/a
$ cd ~
$ cd b
$ pwd
/tmp/test/1/b

詳細については、以下を参照してくださいman

   CDPATH    A <colon>-separated list of pathnames 
             that refer to directories. The cd utility 
             shall use this list in its attempt to  change  
             the directory,  as described in the DESCRIPTION. 
             An empty string in place of a directory 
             pathname represents the current directory. If
             CDPATH is not set, it shall be treated as if 
             it were an empty string.

関連情報