004_Linux中点空格shell脚本文件全解析

Linux 专栏收录该内容
4 篇文章 0 订阅

一、导读

前天在组内分享shell编程时,讲到source命令的功能时,举了生产环境logapi别名设置的例子。我们知道,别名设置如果要永久生效,需要把设置别名的命令写入用户家目录下的,vi ~.bashrc进入后,发现没看到logapi别名的设置。

# .bashrc

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

# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=

# User specific aliases and functions

猜测是在/etc/bashrc文件中设置的,嗯,找到了,最后一行代码。

alias logapi='tail -300f /www/wwwlogs/loan-api/loan-api.9201.log'

好了,问题来了,. /etc/bashrc(点+空格+shell脚本文件)这是什么鬼,没见过。

二、寻找答案

./(点斜杠)与. (点空格)执行脚本文件的区别

百度了下,看了解释了,明白了. /etc/bashrc相当于source /etc/bashrc,即这里"."相当于source命令。但看到下边的这段关于shell scripts描述,却不太理解。如下:

source命令用法:
source FileName
作用:在当前bash环境下读取并执行FileName中的命令。

注:该命令通常用命令“.”来替代。

如:source .bash_rc 与 . .bash_rc 是等效的。

注意:source命令与shell scripts的区别是,
source在当前bash环境下执行命令,而scripts是启动一个子shell来执行命令。这样如果把设置环境变量(或alias等等)的命令写进scripts中,就只会影响子shell,无法改变当前的BASH,所以通过文件(命令列)设置环境变量时,要用source 命令。

于是开启我的实验论证。Let’s go !

三、验证开始

  1. 先准备两个脚本文件
#!/bin/bash

# test1

declare -x GV_TEST_EXE="hello"

echo $GV_TEST_EXE

declare -p GV_TEST_EXE

sleep 35
!/bin/bash

declare -x GV_TEST_EXE="hello"
  1. 验证source 脚本文件与. 脚本文件效果是否相同。
    1. 先看下source的释义:在当前shell中,执行文件中的命令。
      在这里插入图片描述
    2. 两者效果一样。
      3.
  2. 验证shell脚本执行的方式。得到的结论:在可执行脚本文件中定义的环境变量,当开始执行这个脚本文件时,linux会启动一个子shell(开启一个进程),当执行到环境变量定义语句时,环境变量生效,当执行完这个脚本后,这个子shell也就结束了,这个环境变量也跟着这个子shell一起消亡。
    执行脚本的方式
    执行脚本会启动一个进程
  • 1
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值