source命令linux
① linux中source命令的使用方式
source 命令 是一个内置的 shell 命令 ,用于从当前shell会话中的文件读取和执行命令。source命令通常用于保留、更改当前shell中的环境变量。简而言之,source一个 脚本 ,将会在当前shell中运行execute命令。
source命令可用于:
刷新当前的shell环境
在当前环境使用source执行Shell 脚本
从脚本中导入环境中一个Shell函数
从另一个Shell脚本中读取变量
source命令的语法
source命令它需要一个文件,如果提供了参数,那么将用作传递脚本的位置参数。
source FILENAME [ARGUMENTS]
也可以使用.替代source命令:
. FILENAME [ARGUMENTS]
如何使用source命令
1. 刷新当前的shell环境
可以在当前的shell环境中定义一个别名。为ls -al定义一个别名为ll:
[root@localhost ~]# echo "alias ll='ls -al'" >> ~/.bashrc
在~/.bashrc文件中定义完别名,可以使用source命令刷新当前shell环境:
[root@localhost ~]# source ~/.bashrc
现在可以使用ll别名列出当前目录里所有文件了,包括隐藏文件。
2. 在当前环境使用source执行Shell脚本
Shell脚本不知道蚂首你在当前Shell环境中定义的变量。source命令可用于在当前会话中执行你的Shell脚本。
下面在定义一个变量:
[root@localhost ~]# website=https://www. linux probe.com
创建一个脚本:
[root@localhost ~]# vim web.sh
#!/bin/bash
echo $website
使用source在当前shell会话中执闷仿数行它:
[root@localhost ~]# source web.shhttps://www.linuxprobe.com
当使用sh运行脚本时,找不到环境中定义的变量:
3. 从脚本中导入环境中一个Shell函数
首先创建一个脚本,定义一个函数:
[root@localhost ~]# vim func.sh
#!/bin/bash
foo(){
echo "test function!"
}
要在当前的shell会话中导入上述脚本的功能,使用下面命令:
[root@localhost ~]# source func.sh
下面在终端中执行以下func.sh脚本中的foo函数试试:
[root@localhost ~]# foo
test function!
source完脚本之后,可以看到在当前回话的终端中可以执行脚本里面的函数。
4. 从另一个Shell脚本中读取变量
首先创建带有一些变量的shell脚本,请输入:
[root@localhost ~]# vim var.sh
#!/bin/bash
a=1
b=2
c=3
再创大岁建一个脚本,该脚本读取上一个脚本var.sh中的变量:
[root@localhost ~]# vim read.sh
#!/bin/bash
source ~/var.sh
echo $a
echo $b
echo $c
在脚本中首先使用source将var.sh中的变量到处到当前回话,然后echo显示变量值。下面执行read.sh看一下:
5. 读取并执行命令
source命令可以从文件读取和执行命令。下面的一个文本文件中带有两个命令,使用source命令运行该文件,看看是否会执行里面的命令。
下面创建一个文件cmd.txt,保存两个命令:
[root@localhost ~]# cat cmd.txt
ip ad
date
下面使用source执行这个文件:
[root@localhost ~]# source cmd.txt
总结
source命令在当前shell中执行脚本,而exec命令在新的shell中运行。
② linux下的Source命令的基本功能
source命令用法:source FileName
作用:在当前bash环境下读取并执行FileName中的命令。
注:该命令通常用命令".”来替代。
使用范例:
1、source filename
2、. filename#(中间有空格)
source命令(从 C Shell 而来)是bash shell的内置命令。点命令,就是个点符号,(从Bourne Shell而来)是source的另一名称。
同样的,当前脚本中配置的变量也将作为脚本的环境,source(或点)命令通常用于重新执行刚修改的初始化文档,如 .bash_profile 和 .profile 等等。
例如,假如在登录后对 .bash_profile 中的 EDITER 和 TERM 变量做了修改,则能够用source命令重新执行 .bash_profile 中的命令而不用注销并重新登录。
比如在一个脚本里export $KKK=111,假如用./a.sh执行该脚本,执行完毕后,运行echo $KKK,发现没有值,假如用source来执行 ,然后再echo,就会发现KKK=111。
因为调用./a.sh来执行shell是在一个子shell里运行的,所以执行后,结构并没有反应到父shell里,但是source不同他就是在本shell中执行的,所以能够看到结果。
source命令(从 C Shell 而来)是bash shell的内置命令。点命令,就是一个点符号,(从Bourne Shell而来)是source的另一名称。
这两个命令都以一个脚本为参数,该脚本将作为当前shell的环境执行,即不会启动一个新的子进程。所有在脚本中设置的变量将成为当前Shell的一部分。
文件建立好之后,以后每次编译核心,只需要在/usr/src/linux-2.4.20下输入source make_command就行了。这个文件也完全可以做成脚本,只需稍加改动即可。
shell编程中的命令有时和C语言是一样的。&&表示与,||表示或。把两个命令用&&联接起来,如make mrproper && make menuconfig,表示要第一个命令执行成功才能执行第二个命令。
对执行顺序有要求的命令能保证一旦有错误发生,下面的命令不会盲目地继续执行。
③ linux涓璼ource锻戒护璇﹁В
linux绯荤粺涓璼ource锻戒护鐢ㄤ簬閲嶆柊镓ц屽垰淇鏀圭殑鍒濆嫔寲鏂囦欢锛屼娇涔嬬珛鍗崇敓鏁堬纴钥屼笉蹇呮敞阌骞堕吨鏂扮橱褰曘备笅闱㈡槸source锻戒护鍐呭圭殑鍏蜂綋浠嬬粛锛
1銆乻ource锻戒护绠浠嬶细
source锻戒护涔熺О涓衡灭偣锻戒护钬濓纴涔熷氨鏄涓涓镣圭﹀彿锛.锛夛纴鏄痓ash镄勫唴閮ㄥ懡浠わ纴浣縎hell璇诲叆鎸囧畾镄凷hell绋嫔簭鏂囦欢骞朵緷娆℃墽琛屾枃浠朵腑镄勬墍链夎鍙ワ纴鐢ㄤ簬閲嶆柊镓ц屽垰淇鏀圭殑鍒濆嫔寲鏂囦欢锛屼娇涔嬬珛鍗崇敓鏁堬纴钥屼笉蹇呮敞阌骞堕吨鏂扮橱褰曘
2銆佽娉曪细
source filename 鎴 . filename
3銆乻ource filename 涓 sh filename 鍙./filename镓ц岃剼链镄勫尯鍒锛
褰搒hell鑴氭湰鍏锋湁鍙镓ц屾潈闄愭椂锛岀敤sh filename涓./filename镓ц岃剼链鏄娌℃湁鍖哄埆镄勚./filename鏄锲犱负褰揿墠鐩褰曟病链夊湪PATH涓锛屾墍链夆.钬濇槸鐢ㄦ潵琛ㄧず褰揿墠鐩褰旷殑銆
sh filename 閲嶆柊寤虹珛涓涓瀛恠hell锛屽湪瀛恠hell涓镓ц岃剼链閲岄溃镄勮鍙ワ纴璇ュ瓙shell缁ф圹鐖秙hell镄勭幆澧冨彉閲忥纴浣嗗瓙shell鏂板缓镄勚佹敼鍙樼殑鍙橀噺涓崭细琚甯﹀洖鐖秙hell锛岄櫎闱炰娇鐢╡xport銆
source filename锛氲繖涓锻戒护鍏跺疄鍙鏄绠鍗曞湴璇诲彇鑴氭湰閲岄溃镄勮鍙ヤ緷娆″湪褰揿墠shell閲岄溃镓ц岋纴娌℃湁寤虹珛鏂扮殑瀛恠hell銆傞偅涔堣剼链閲岄溃镓链夋柊寤恒佹敼鍙桦彉閲忕殑璇鍙ラ兘浼氢缭瀛桦湪褰揿墠shell閲岄溃銆
涓句緥锛
1.鏂板缓涓涓猼est.sh鑴氭湰锛屽唴瀹逛负:A=1
2.铹跺悗浣垮叾鍙镓ц宑hmod +x test.sh
3.杩愯宻h test.sh钖庯纴echo $A锛屾樉绀轰负绌猴纴锲犱负A=1骞舵湭浼犲洖缁椤綋鍓岘hell
4.杩愯./test.sh钖庯纴涔熸槸涓镙风殑鏁堟灉
5.杩愯宻ource test.sh 鎴栬 . test.sh锛岀劧钖巈cho $A锛屽垯浼氭樉绀1锛岃存槑A=1镄勫彉閲忓湪褰揿墠shell涓
④ linux中的source命令和直接执行脚本的区别
source 以及 . 直接在当前的进程中读取脚本的配置,不会开一个新的进程!
source会将脚本的内容直接影响到父进程的(因为它不开辟新线程,可以说是直接在当前进程中加入脚本的执行内容)。所以你source之后,里面配置的变量都会加入到当前环境中,你可以在该shell中调用脚本中的变量!
而./xx.sh 以及 sh xx.sh
是在当前进程下新开一个子shell进程运行这个脚本,当脚本运行完毕了,sh中设置的变量和子进程一起被销毁了!(该子shell继承了父进程的shell的环境变量,子shell结束了变量将被销毁,如果使用了export可以将子shell的变量反馈到父级别的shell中)
⑤ linux中source这个命令放在那个文件夹下
source是/bin/bash的内建命令,不是linux命令所以在PATH里面是找不到的。