在.bashrc文件中定义函数

  在命令行上直接定义shell函数的明显缺点是当退出shell时,函数就消失了,对于复杂的函数来说,这可能会是个问题。
  一个简单的方法就是每次启动新shell的时候都会自动加载所需要的函数。
  最好的办法就是.bashrc文件。bash shell会在每次启动时在主目录查找这个文件,不管是交互式的还是从现有shell中启动一个新的shell
1、直接定义函数
  可以直接在主目录的.bashrc文件中定义函数。.bashrc的路径一搬为 home/linux用户名/  许多Linux发行版已经在.bashrc文件中定义了一些东西了,所以注意别删掉这些内容,只要在已有文件的末尾上加上你写的函数就行了。类似如下:

# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

function addem {
  echo $[ $1 + $2 ]
}
# User specific aliases and functions

其中

function addem {
  echo $[ $1 + $2 ]
}

是用户自行添加的。

直到下次启动新的bash shell 时该函数才会生效。添加并启动bash shell后,你就能在系统上任意地方使用该函数了。

2、读取函数文件
只要是在shell脚本中,你都可以用source命令(或者它的别名点操作符)来将已有库文件中的函数添加到你的.bashrc脚本中:

# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

/home/rich/lobraries/myfuncs

# User specific aliases and functions

确保包含了引用库文件的正确路径,以便于bash shell来查找该文件。下次启动shell时,库中的所有函数都可以在命令行界面下使用了:

$ addem 10 5
15
$ multem 10 5
50
$divem 10 5
2

更好一点的是,shell还会将定义好的函数传给与shell进程,这样这些函数在该shell会话中的任何shell脚本中也都可以用。你可以写个脚本来测试,直接使用这些函数而不用单独定义或读取它们:

#!/bin/bash
# using functions defined in a library file

value1=10;
value2=5
result1=`addem $value1 $value2`
result2=`multem $value1 $value2`
result3=`divem $value1 $value2`
echo "The result of adding them is: $result1"
echo "The result of multiplying th is: $result2"
echo "The result of dividing them is: $result3"

运行后输出为:

The result of adding them is: 15
The result of multiplying them is:50
the result of dividing them is:2

甚至不用读取库文件,这些函数也能在shell脚本中还好的工作。

时间: 2024-10-10 23:15:07

在.bashrc文件中定义函数的相关文章

c语言头文件中定义全局变量的问题

问题是这么开始的: 最近在看一个PHP的扩展源码,编译的时候的遇到一个问题: ld: 1 duplicate symbol for architecture x86_64 仔细看了一下源码,发现在头文件中 出现了全局变量的定义. 简化一下后,可以这么理解: // t1.h #ifndef T1_H #define T1_H int a = 0; #endif //------------------ //t1.c #include "t1.h" #include "t2.h&

VS2013 VC++的.cpp文件调用CUDA的.cu文件中的函数

CUDA 8.0在函数的调用中方便的让人感动.以下是从网上学到的VC++的.cpp文件调用CUDA的.cu文件中的函数方法,和一般的VC++函数调用的方法基本没差别. 使用的CUDA版本为CUDA 8.0 ,默认安装. 1.VS2013新建CUDA 8.0项目 2.修改工程 .cpp调用.cu文件的基础是  函数的定义和函数的实现可以在不同的文件,而且.cu文件也支持这一特点,所以就可以修改成以下情况,即新建kernel.h和main.cpp,把头文件和函数声明写在头文件里面,kernel.cu

shell从函数文件中调用函数

碰到一个shell中函数调用的小问题,记录一下. shell中函数有三种调用方式,一种是在文件前面定义函数,然后在下面直接调用:一种是通过载入shell,在shell中直接调用:第三种是将函数写入文件,然后在其他shell中调用函数. 这里写一下关于第三种方法的例子: is_it_a_directory() { if [ $# -lt 1 ];then echo "is_it_a_directory:I need an argument" return 1 fi _DIRECTORY_

在VC程序中获得资源文件中定义的公司名称

今天想从自己定义的资源文件中取出公司名称, 百度了下发现全是关于从资源文件中取得版本号的办法, 还好微软的MSDN给了我答案, 为了以后方便自己和别人, 就把这个函数贴出来. 希望百度能优化一下自己的搜索算法, 搜出来的结果几乎都是重复的, 想用能搜出来的结果用不了.百度的这一毛病也映射出了中国网民的复制粘贴的"情结"特别严重, 都是原样复制, 其中的错误都不改一下. ///////////////////////////////////////////////////////////

python文件中的__name__=='__main__'的使用及调用其他py文件中的函数方法

最近学习python的时候经常会看到好多py文件中都有if _name_ == '_main_': 这句话,所以就花点儿时间来研究一下,总结了一下使用方法及原则. 平时我们使用python IDE编写py程序的时候 一般是很少用到if name == 'main':这句话的,因为我们在运行py文件时,没有牵扯到其他目录下自定义的py文件,所以不用写这句话就可以无忧地执行当前py文件中的函数,但 想想 如果要是需要调用其他的py文件中的自定义函数呢?这就需要使用if name == 'main':

能不能在头文件中定义全局变量?(转)

地址:https://blog.csdn.net/baidu_35679960/article/details/79200865 1.ANSI C标准是什么?GNU又是什么?ld是什么? ANSI C是C语言的标准规范,是国际标准化组织制定的国际标准. 虽然 ANSI C规范了C语言的实现,但是在实际情况中,各家C语言提供商都会根据平台的不同情况对ANSI C进行一定的扩展.因此可以将现实中C语言实现看作是ANSI C的一个超集.比较有代表性的例子是linux的gcc编译器.由于该编译器对ANS

NS前缀\OC中的注释\访问OC原文件、C原文件中的函数

///////////////////////////////////////// //////////////////////////////////////// NS前缀 NS来自于NeXTStep的一个软件 NeXT Software OC中不支持命名空间(namespace) NS是为了避免命名冲突而给的前缀 看到NS前缀就知道是Cocoa中的系统类的名称 "@"的使用方法 1.@""这个符号表示将C中的字符串转化为OC中的字符串对象 2.@符号 OC中的大

关于在头文件中定义变量的问题

如果在一个头文件中定义了一个变量 A.h: int i; 在A.cpp,B.cpp...文件中包含了这个头文件,编译时就会产生重复定义的错误.问题所在是因为int i;这句代码是定义了一个i变量,包含一次头文件就定义了一次i,包含多次肯定引起错误.如果改成extern int i;这句代码就变成了一个声明了.并不会定义i这个变量.不过在多个cpp文件里初始化一样会出现错误.只能在一个cpp文件中进行初始化.

解决头文件中定义全局变量MSVC、GNU编译器出现重定义问题

有时候我们经常碰到这样的事情,想定义某个类的静态成员,在头文件中定义该成员或者全局变量,头文件又同时被多个文件引用到,链接的时候则会出现,重定义,但是又不想在cpp文件中定义,现有一种方法可以解决此问题,直接上代码 #if defined(_MSC_VER ) __declspec(selectany) #elif defined(__GNUC__) __attribute__((weak)) #else #error "unknown complier" #endif int a=1