shell中的source命令的巧妙用法

首先,通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。例如,当我们修改了/etc/profile文件,并想让它立刻生效,而不用重新登录,就可以使用source命令,如source /etc/profile。

其次,source filepath或者. filepath,sh filepath或者./filepath区别:

1. sh filepath会重新建立一个子shell,在子shell中执行脚本里面的语句,该子shell继承父shell的环境变量,但子shell是新建的,其改变的变量不会被带回父shell,除非使用export。

2. source filename其实只是简单地读取脚本里面的语句依次在当前shell里面执行,没有建立新的子shell。那么脚本里面所有新建、改变变量的语句都会保存在当前shell里面。

因为不会建立新的子shell,变量的值都可以直接取到,我们看一个例子:

我们可以把下面的这些配置当成shell脚本中的赋值语句,然后使用source获取变量的值,因为这个配置不符合任何ini之类格式,所以不好用程序获取:

这里用到了&&,它的作用是左边的命令执行成功,才执行右边的命令;||就相反,左边的命令执行失败,才执行右边的命令。

2>/dev/nul下面看下内容详情

标准输入0    从键盘获得输入 /proc/self/fd/0

标准输出1    输出到屏幕(即控制台) /proc/self/fd/1

错误输出2    输出到屏幕(即控制台) /proc/self/fd/2

/dev/null代表linux的空设备文件,所有往这个文件里面写入的内容都会丢失,俗称“黑洞”

1. 2>/dev/null意思就是把错误输出到“黑洞”

2. >/dev/null 2>&1默认情况是1,也就是等同于1>/dev/null 2>&1。意思就是把标准输出重定向到“黑洞”,还把错误输出2重定向到标准输出1,也就是标准输出和错误输出都进了“黑洞”

3. 2>&1 >/dev/null意思就是把错误输出2重定向到标准出书1,也就是屏幕,标准输出进了“黑洞”,也就是标准输出进了黑洞,错误输出打印到屏幕

关于这里”&”的作用,我们可以这么理解2>/dev/null重定向到文件,那么2>&1,这里如果去掉了&就是把错误输出给了文件1了,用了&是表明1是标准输出。

总结

以上所述是小编给大家介绍的shell中的source命令的巧妙用法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • 详解shell中source、sh、bash、./执行脚本的区别

    1.source命令用法: source FileName 作用:在当前bash环境下读取并执行FileName中的命令.该filename文件可以无"执行权限" 注:该命令通常用命令"."来替代. 如:source .bash_profile . .bash_profile两者等效. source(或点)命令通常用于重新执行刚修改的初始化文档. source命令(从 C Shell 而来)是bash shell的内置命令. 点命令,就是个点符号,(从Bourne

  • shell中的source命令的巧妙用法

    首先,通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录.例如,当我们修改了/etc/profile文件,并想让它立刻生效,而不用重新登录,就可以使用source命令,如source /etc/profile. 其次,source filepath或者. filepath,sh filepath或者./filepath区别: 1. sh filepath会重新建立一个子shell,在子shell中执行脚本里面的语句,该子shell继承父shell的环境变量,但子shell是新

  • shell中常用的命令之diff和patch用法

    shell中常用的命令:diff(比较文件内容)和patch(打补丁) 1.diff用法 比较文件内容不同 diff file1 fil2 #以后面的文件file2作为标准 比较file1相对于file2来说有什么不同 比较文件例子 -r:比较目录 diff -r /etc/ /tmp/ 注意:比较的结果是目录中文件的不同 而不是文件内容的不同 2.path用法 patch常用来打补丁 -u:覆盖原文件内容的打补丁 diff -u file2 file1 diff -u file2 file1

  • 详解 Shell中的grep命令

    用'grep'搜索文本文件 如果您要在几个文本文件中查找一字符串,可以使用'grep'命令.'grep'在文本中搜索指定的字符串.举个例子:假设您正在'/usr/src/linux/Documentation'目录下搜索带字符串'magic'的文件: $ grep magic /usr/src/linux/Documentation/* sysrq.txt:* How do I enable the magic SysRQ key? sysrq.txt:* How do I use the ma

  • linux中mount/umount命令的基本用法及开机自动挂载方法

    本文介绍了linux中mount/umount命令的基本用法及开机自动挂载,具体方法如下: mount命令格式如下: 格式:mount [-参数] [设备名称] [挂载点] 其中常用的参数有: -a 安装在/etc/fstab文件中类出的所有文件系统. -f 伪装mount,作出检查设备和目录的样子,但并不真正挂载文件系统. -n 不把安装记录在/etc/mtab 文件中. -r 讲文件系统安装为只读. -v 详细显示安装信息. -w 将文件系统安装为可写,为命令默认情况. -t <文件系统类型

  • Bash Shell中的select命令简单使用示例

    前言 今天刚好写了一个自动化打包脚本,再次使用到了bash shell,好幸福的感觉.这里主要是想介绍一下select命令,这个命令可以帮助我们完成菜单选择功能. 格式 我今天也是第一次使用select流程控制,在php.Java.C这些语言中并没有实现select功能.Bash Shell中,select格式如下: select $var in ${list[@]} do statements that can use $var done 在select执行时,会根据list数组给出选择菜单,

  • Android系统在shell中的df命令实现

    当我们在shell中敲击df这条命令的时候,会看到: root@android:/ # df Filesystem Size Used Free Blksize /dev 446.8M 36.0K 446.8M 4096 /mnt/secure 446.8M 0.0 K 446.8M 4096 /mnt/asec 446.8M 0.0 K 446.8M 4096 /mnt/cart0 446.8M 0.0 K 446.8M 4096 /mnt/obb 446.8M 0.0 K 446.8M 40

  • Linux shell中的test命令用法教程

    test命令 test命令是shell环境中测试条件表达式的实用工具,下面来看看test命令的用法介绍: 语法 test(选项) 选项 -b<文件>:如果文件为一个块特殊文件,则为真: -c<文件>:如果文件为一个字符特殊文件,则为真: -d<文件>:如果文件为一个目录,则为真: -e<文件>:如果文件存在,则为真: -f<文件>:如果文件为一个普通文件,则为真: -g<文件>:如果设置了文件的SGID位,则为真: -G<文件&

  • Shell中使用scp命令实现文件上传代码

    自从法现 SSH 可以执行远端命令后,ftp 软件也渐渐很少用了. 每次更新服务器代码,都要打包.上传.登录到服务器修改文件权限.更新 Cache 等等,又慢又容易出错,所以做成脚本,一次帮我搞定,自己就点上一根烟坐在电脑面前发呆,要么就玩会儿<植物大战僵尸>啥的,悠闲! PS: Ant 以及 Phing 用户,你们可以无视了- 我只是喜欢玩 Shell 而已. 复制代码 代码如下: #!/bin/sh   HOME='/cygdrive/d/public_html/myproject'  

  • shell中使用expect命令进行远程执行命令脚本

    expect是用来实现自动交互功能的工具之一,使用expect-send来实现交互过程. 注意: 1.脚本的执行方法与bash shell不一样,比如:expect example.sh 2.向一个脚本传递参数时,bash shell是使用$1,$2...来接收参数的:而expect则将脚本的执行参数保存在数组$argv中,在脚本中一般将其赋值给变量:set 变量名 [lindex $argv 参数] #!/usr/bin/expect set ip [lindex $argv 0] set p

  • 一文秒懂python中的 \r 与 end=‘’ 巧妙用法

    /r的用法与end=""用法 \r 表示将光标的位置回退到本行的开头位置 end="" 意思是末尾不换行 在python里面,print()函数默认换行,即默认参数end = '\n' for i in range(3): print("Hello World") 可以设置print()函数的参数end=''",从而实现不换行 for i in range(3): print("Hello World", end=&

随机推荐