5

私はLinux環境で働いており、さまざまな作業領域に特定のモジュールをロードする必要があります。これらは、個々のファイルシステムディレクトリによって区切られています。

ディレクトリに入るときに別の1行のコマンドを実行する簡単な方法があるかどうか疑問に思っています。使用しているシェルの種類に柔軟に対応できますが、現在はCシェルを使用しています。

4

3 に答える 3

7

bashを使用している場合は、次のような関数を作成することをお勧めします。

function custom_cd() { custom_command $1; cd $1; }
alias cd='custom_cd'

ここで、カスタムコマンドは、入力したディレクトリに応じて特定のコマンドを実行するものであれば何でもかまいません。

後で宣言されたエイリアスにより、「cd」と入力すると、関数と実際のcdコマンドが呼び出されます。

編集:あなたの必要性のための例

function custom_cd() {
    if [ -z "$1" ];
    then
        target=~
    else
        target=$1
    fi
    target=${target%/}
    parent=$(dirname `readlink -f $target`)
    grand_parent=`dirname $parent`
    script=$grand_parent/`basename $target`.sh
    if [ -x $script ];
    then
      `$script`
    fi
    cd $1
}

説明:

入力するディレクトリの親を含む変数を作成します。次に、親の親を取得します。次に、祖父母ディレクトリにスクリプト名を作成します。

次に、このファイル名の実行可能性がチェックされ、実行可能である場合は、スクリプトが実行され、最後に実際のcdコマンドが実行されます。

エイリアスの前に関数を定義するように注意してください。そうしないと、無限再帰が発生します。

于 2013-01-23T16:32:23.507 に答える
3

これらの特別なコマンドを実行する関数を作成できます。

run_command() {
  case `pwd` in
    "/path/to/dir1" )
      ...
      ;;
    "/path/to/dir2" )
      ...
      ;;
    ...
  esac
}

cd次に、たとえば別の関数と一緒にその関数を呼び出します。

cd2() {
  cd $1
  run_command
}

cd2 /path/to/somewhere
于 2013-01-23T16:39:48.160 に答える
2

aliasかなり漠然とした質問ですが、コマンドが役立つかもしれないと思います。

alias cd='echo "hello $1"'

hello <arg given to cd>これは、どこかでCDを作成しようとすると表示されます

于 2013-01-23T16:29:49.233 に答える