函数代替C shell登录脚本中的别名

jyztefdp  于 2023-06-24  发布在  Shell
关注(0)|答案(4)|浏览(99)

我在this主题中看到,如果你想使用参数,你可以在shell登录脚本中添加一个函数而不是别名。然而,我将以下代码放在我的.cshrc文件中有别名的部分:

function gf()
{
    grep -n $1 `find .` | grep -v "can't open"
}

但是当我输入source.cshrc时,我得到错误消息:位置不佳()。C shell的语法与Bash shell的语法不同吗?如果是,正确的语法是什么?

cbeh67ev

cbeh67ev1#

不幸的是,您不能在csh中定义函数,就像在大多数其他shell中一样。此功能在csh中不存在。
唯一的选择是创建一个脚本并将其放置在PATH上的目录中,例如。~/bin

jckbn6z7

jckbn6z72#

如果你只需要传递一个参数,那么就把\!$放在你希望你的参数所在的位置。
例如:
如果将alias mygrep grep -i \!$ myfile.txt放入~/.cshrc中,并运行mygrep mykeywordcsh将运行alias mygrep grep -i mykeyword myfile.txt
请参阅this了解更多信息。

gorkyyrv

gorkyyrv3#

以下是我的解决方案:

#!/bin/csh

if ("$1" == "run") goto $2

echo "Now in default mode"

echo "Calling myself"

csh -f dummy run sub1

csh -f dummy run sub2

exit

sub1:

echo "In sub1"

exit

sub2:

echo "In sub2"

exit
35g0bw71

35g0bw714#

.cshrc.tcshrc中设置以下内容:

alias function '( set argv = ( \!* ) ; source ~/.cshfuncs )'

.cshfuncs中定义函数:

# Functions for C Shell.

switch ("$1")
  case "myfunc":
    grep -n "$2" "`find .`" | grep -v "can't open"
    exit
  case "myfunc2":
    echo "Another function."
    exit
  default:
    echo "Function $1 not set."
    exit -1
endsw

相关问题