bash谜

这是一个普通的bash脚本 0.sh,它做一件耗时的工作(do_sth),希望调用 0.sh 时不要阻塞

#!/bin/bash
do_sth()
{
  sleep 3
}

main()
{
  do_sth &
  echo do sth in background ...
}

main

shell环境执行 0.sh 会马上返回,它把do_sth的任务放后台执行了

但如果这样

./0.sh | cat

发现竟然是阻塞的

于是在9行重定向的输出,1.sh | cat 时就不阻塞了

#!/bin/bash
do_sth()
{
  sleep 3
}

main()
{
  do_sth >/dev/null &
  echo do sth in background ...
}

main

但是在最后一行 main 后面重定向以后 2.sh | cat 又阻塞了

#!/bin/bash
do_sth()
{
  sleep 3
}

main()
{
  do_sth >/dev/null &
  echo do sth in background ...
}

main >/dev/null

琢磨了很久, 原来这次阻塞正式阻塞在 main 重定向这里

时间: 2024-12-06 16:05:08

bash谜的相关文章

grep前传之侠影之谜 (Grep begins)

一.自述 我叫grep,是同你们一样,生活在都市里.每天做着重复的事,忙碌着. 说起来这个好笑,我生活的国家叫Bourne-Again Shell,因为我国来往人多,大家读者不便,于是心口不一的叫它"bash".bash,呵呵,好像被狠狠的砸了一下. 眼前这座烂尾楼便是我藏身的地方,它叫/bin,这里的居民都是上班族,那天下班后我数了一下用户,发现114个住户!天哪,好一座危楼! 在这个国家每家每户都供奉着一尊雕像,它叫root,对了,我和我的家人(group)都属于它,无理由的信奉着

Linux Bash 提示符的一些骚操作

当你在 Linux 环境下打开一个 Shell 终端时,会看到命令行中出现了类似下面的一个 Bash 提示符:[[email protected]$host ~]$你知道命令行提示符其实是可以自己设置添加许多非常有用的信息的吗?在这篇文章中我就会教你如何自定义自己的 Bash 命令行提示符,想看的话就接着看吧~ 如何设置 Bash 提示符 Bash 提示符是通过环境变量 PS1 (提示符字符串 1Prompt String 1) 来设置的,它用于交互式 shell 提示符.当然如果你需要更多的输

Bash脚本之函数定义和调用

把那些在脚本中重复出现并且没有任何改变的代码,封装起来,在适当的场景中调用执行.程序员将这种被封装起来的代码称为功能体,或者叫模块,也称为函数.这样看来是不是和循环类似,循环也是为了方便去多次执行一堆代码,而函数是将一堆代码写在一起,起一个名字,然后在需要这堆代码的时候只需要写上函数的名字即可.在shell脚本编程中,函数是由若干条shell命令组成的语句块,函数里面的内容和shell程序形式上是一致的.不同之处就是,shell代码可以直接被执行,而函数中的内容,不能独立执行,只有被调用的时候才

Bash 的若干基本问题

Bash 的若干基本问题 这里介绍一些bash启动前.后的问题,以及一些使用bash需要注意的基本问题. 1.Bash的介绍 Bash是一种Shell程序,它是一般的Linux系统中的默认的Shell程序,一般情况下Bash指的是/bin/bash这个软件. 一个Linux系统中有多少个可用的Shell程序,可以从/etc/shells文件中查出来. 当前登录用户的默认Shell是哪一个,可以从/etc/passwd文件中与此用户对应的那一行最后一个字段看出来.或者也可以通过echo $SHEL

bash

bash编程 if 条件判断; then fi if 条件判断; then 内容 else 内容 fi

004-用户、组、权限管理命令及bash配置文件、管道、重定向、grep

l  1.用户管理命令 1.)创建用户命令 useradd  [OPTIONS] USERNAME -u(UID):指定用户UID -g(GID):指定基本组 -G( group,...):指定附加组 -c"COMMENT":指定注释信息 -d(home_dir):指定家目录/path/to/directory -s:指定SHELL路径(/etc/shells指定了当前系统可用的安全shell) -m –k:强行为用户创建家目录 -M:不创建用户家目录 /etc/login.defs

bash编程

变量:命名内存空间 变量类型:事先确定数据的存储格式和长度 字符 数值 1.整型 2.浮点型 日期时间 布尔型 算数运算 逻辑运算:与.或.非.异或 shell:弱类型编程语言 强:变量在使用前必须声明,甚至要初始化变量.数字型初始化为0,字符型初始化为空NULL 弱:变量用时声明,甚至不区分类型,默认是字符串. 变量赋值:VAR_NAME=VALUE bash变量类型 环境变量 本地变量(局部变量):与bash进程关联的变量 位置变量 特殊变量(系统变量):linux内置,用于保存特殊数据的变

bash 数组参数的传递

一.方式一 把数组参数当做普通变量传递 #!/bin/bash function arrayfun { echo "get function parameter $*" } arraypara=(claire obama george) arrayfun $arraypara 上面脚最终会显示 get function parameter claire 只收到了数组中的第1个参数 二.方式二 我们改动一下 #!/bin/bash function arrayfun { echo &qu

bash简单for循环2

写一个脚本:输入三个参数 0,1,2,3之一输入3:计算100以内所有能被3整除的正整数的和:输入2:计算100以内所有所有偶数的和:输入1:计算100以内所有所有奇数的和:输入0:计算100以内所有所有整数的和: 代码 #!/bin/bash # declare -i SUM=0 if [ $1 == 3 ];then   for I in {1..100};do     if [ $[$I%3] -eq 0 ];then       SUM=$[$SUM+$I]     fi   done