将bash函数转换为csh别名时出错

时间:2013-01-21 15:02:53

标签: bash unix csh tcsh

我正在编写一个csh别名,以便我可以在csh中使用以下bash函数:

function up( )
{
    LIMIT=$1
    P=$PWD
    for ((i=1; i <= LIMIT; i++))
    do
        P=$P/..
    done
    cd $P
    export MPWD=$P
}

(我从here偷走了上面的bash函数)

我写了这个:

alias up 'set LIMIT=$1; set P=$PWD; set counter = LIMIT;  while[counter!=0] set counter = counter-1; P=$P/.. ; end cd $P; setenv MPWD=$P'

但是,我收到以下错误:

while[counter!=0]: No match.
P=/net/devstorage/home/rghosh/..: Command not found.
end: Too many arguments.

我的脚本没有按预期工作。我一直在阅读来自here的csh。

我不是csh的专家,我上面写的是我的第一个csh脚本。请让我知道我做错了什么。

2 个答案:

答案 0 :(得分:2)

你也可以这样做

alias up 'cd `yes ".." | head -n\!* | tr "\n" "\/"`'

yes ".."会无限期地重复字符串..;调用别名时,head会将其截断为作为参数传递的数字(!*扩展为传递的参数;类似于$@),tr会将换行符转换为{ {1}}。

激进7的答案似乎更整洁;但只适用于tcsh(完全​​是你想要的wat)。这应该适用于shell

答案 1 :(得分:1)

您可以使用csh的repeat功能

alias up 'cd `pwd``repeat \!^ echo -n /..`'

不需要循环(这很方便,因为tcsh中的while构造看起来非常挑剔)