2013-01-23 103 views
5

我在Linux環境中工作,需要爲不同的工作區域加載某些模塊。這些由單獨的文件系統目錄分隔。Linux終端:更改目錄時運行命令

我想知道是否有一種簡單的方法來進入目錄時運行不同的1行命令。我對使用的shell的類型很靈活,但我目前使用C Shell。

回答

6

如果你正在使用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命令。

小心在別名之前定義函數,否則會導致無限遞歸!

+1

爲了安全起見,在函數中使用'builtin cd'來確保你沒有打到別名。實際上,如果使用「內建」命令,則不需要別名,可以將函數命名爲「cd」。 –

+1

@glennjackman不知道內置,我懷疑這樣的東西存在,很好! – SirDarius

+0

這很好。我用這種風格實現了一些移植到C shell的東西,但也會製作一個Bash版本。謝謝! – devshans

2

一個相當模糊的問題,但我認爲alias命令可以幫助你:

alias cd='echo "hello $1"' 

這將顯示hello <arg given to cd>當您嘗試CD地方

+0

我想這是相當含糊的。我需要爲整個文件系統的一小部分運行一個不同的命令。 例如,如果我想進入目錄/ home/user/a,那麼我想運行/home/a.csh。 然後,如果我輸入/ home/scripts/b我會運行/home/b.csh – devshans

+0

我給你的是一個啓動器。例如,如果您使用gnome或其他文件管理器,它將不起作用。我不知道在更改目錄時可以自定義執行的一些觸發器。也許你可以掛鉤到與安全策略相關的東西 –

3

您可以創建一個函數來運行這些特殊命令。

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

然後,你可以用cd與其他函數一起調用該函數。

cd2() { 
    cd $1 
    run_command 
} 

cd2 /path/to/somewhere