bash 内置命令exec (重要!!)

bash 内置命令exec (重要!!)

shell 的内件命令exec执行命令时,不启用新的shell进程【注: source 和 . 不启用新的shell,在当前shell中执行,设定的局部变量在执行完命令后仍然有效;bash或sh 或shell script执行时,另起一个子shell,其继承父shell的环境变量,其子shelll的变量执行完后不影响父shell,注意三类的区别】exec是用被执行的命令行替换掉当前的shell进程,且exec命令后的其他命令将不再执行。例如在当前shell中执行 exec ls 表示执行ls这条命令来替换当前的shell  即为执行完后会退出当前shell。为了避免这个结果的影响,一般将exec命令放到一个shell脚本中,用主脚本调用这个脚本,调用处可以用bash  xx.sh(xx.sh为存放exec命令的脚本)。这样会为xx.sh建立一个子shell去执行,当执行exec后该子脚本进程就被替换成相应的exec的命令

其中有一个例外:当exec命令对文件描述符操作的时候,就不会替换shell,而是操作完成后还会继续执行后面的命令

查看系统操作符

1
2
3
4
5
6
[root@localhost ~] # ll /dev/fd/
total 0
lrwx------. 1 root root 64 Jul  2 18:18 0 ->  /dev/pts/1
lrwx------. 1 root root 64 Jul  2 18:18 1 ->  /dev/pts/1
lrwx------. 1 root root 64 Jul  2 18:18 2 ->  /dev/pts/1
lr-x------. 1 root root 64 Jul  2 18:18 3 ->  /proc/54592/fd

exec 3<&0 表示将操作符3也指向标准输入  

exec 8<>tmp_in

[root@localhost ~]# echo "ls -li">&8
[root@localhost ~]# echo "free -m">&8
[root@localhost ~]# cat tmp_in 
df -h
ls -li
free -m
[root@localhost ~]# 

 应用

#!/bin/bash
rm -rf tmp_in
mknod tmp_in p
exec 8<>tmp_in
telnet 127.0.0.1 23 <&8 &
echo xxx >>tmp_in
sleep
echo -e "35quit">>tmp_in
### 回答1: "exec bash"是一个命令,它会在当前 shell 中执行一个新的 bash shell。这个命令可以用来替换当前 shell 进程,以便在一个新的 bash 环境中执行命令,或者在需要重新启动 shell 时快速完成此操作。 ### 回答2: exec bash是一个shell命令,用于在当前的shell环境中执行一个新的bash子进程,并将控制权交给这个子进程。 当我们在命令行中输入exec bash时,实际上是在启动一个新的bash子进程,并将子进程的输入、输出和错误流指向当前的shell进程。这意味着,执行exec bash后,当前的shell进程会被替换为一个新的bash进程,并且原来的环境变量、别名以及shell参数等都会被清除,只保留新的bash环境。 exec bash的主要作用是刷新当前的shell环境,重新加载bash的配置文件(例如~/.bashrc)和环境变量,以使得新的配置信息和环境变量生效。同时,也可以通过exec bash来启动一个新的bash会话,用于临时执行一些命令或脚本。 需要注意的是,执行exec bash后,原来的shell进程的任何操作都会终止,因此在执行该命令之前,应确保已保存当前工作的进度和数据。另外,如果在exec bash命令后还有其他命令,那么这些命令将不会被执行,因为控制权已经完全交给了新的bash子进程。 总结来说,exec bash命令的含义是启动一个新的bash子进程,刷新当前的shell环境并替换为新的bash进程,以便加载新的配置信息和环境变量,并临时执行一些命令或脚本。 ### 回答3: exec bash 是一个命令,用于执行一个新的bash shell,取代当前的shell。当我们在终端中键入exec bash命令,它会创建一个全新的子shell,并将当前的shell替换为子shell。这意味着在执行exec bash后,我们将进入一个全新的bash环境,此操作对于调试和修改当前shell环境非常有用。 使用exec bash的主要好处之一是它可以重置当前shell的环境变量和配置。在某些情况下,我们可能会更改环境变量或shell配置文件(如.bashrc),并希望立即生效。通过执行exec bash,我们可以使之生效,而不必注销并重新登录。 另一个使用exec bash的典型场景是在脚本中执行该命令。当脚本需要在不影响当前shell环境的情况下创建一个子shell时,可以使用exec bash命令。这对于脚本的模块化和隔离非常有用,因为子shell中的任何变量和配置更改都不会影响到父shell。 但需要注意的是,当执行exec bash时,当前shell的状态将被丢弃,包括已经创建的所有变量和配置。因此,在使用这个命令之前,我们应该确保已经保存了需要保留的任何重要信息。 总之,exec bash是一个用于执行新bash shell的命令,它提供了一种快速方便的方法来重置当前shell的环境、调试和在脚本中创建子shell。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值