linux - Bash 练习为另一个脚本提供多个输入
问题描述
我遇到了另一个准备考试的练习,我总是觉得输入/输出的重定向很棘手。
它要求:编写一个名为“contaseparatamente.sh”的第一个脚本,它接受可变数量的参数,每个参数都是一个文件名。脚本需要在标准输出上写入偶数参数的总行数,在标准错误上写入奇数参数的总行数。(我已经这样做了,它有效):GNU nano 4.8 contaseparatamente.sh
#!/bin/bash
NUMEVEN=0
NUMODD=0
for((i=1; i<=$#; i++)); do
if((i%2==0))
then
NUMEVEN=$((${NUMEVEN} + `wc -l ${!i} | cut -d ' ' -f 1` ))
else
NUMODD=$((${NUMODD} + `wc -l ${!i} | cut -d ' ' -f 1` ))
fi;
done
echo rows of even ${NUMEVEN}
echo rows of odd ${NUMODD} 1<&2
然后它要求:编写第二个脚本以启动并执行第一个脚本,将他作为参数输出的前 7 行ls -S1 /usr/include/*.h
最后这个第二个脚本必须在标准错误上显示第一个脚本的输出。这是我的尝试:GNU nano 4.8
#!/bin/bash
./contaseparatamente.sh <( ls -S1 /usr/include/*.h | head -n 7 ) 2<&1
但以这种方式,结果是偶数为 0 行,奇数为 7,这是不可能的
解决方案
我不喜欢这个任务,但是...
要以最简单的方式传递参数,请使用不带引号的子外壳。(呃)
#!/bin/bash
./contaseparatamente.sh $( ls -S1 /usr/include/*.h | head -n 7 )
如果您什么都不做,第一个脚本的标准错误将在您运行第二个脚本时显示出来。如果您在标准输出上需要它,只需重定向。
#!/bin/bash
./contaseparatamente.sh $( ls -S1 /usr/include/*.h | head -n 7 ) 2>&1
推荐阅读
- javascript - 为什么我得到 Uncaught TypeError: Cannot read property 'sequence' of undefined
- facebook - 将 Facebook Checkbox 插件用作 iframe 小部件时出现 CSP 错误
- git - Git 仍在跟踪我已经删除的文件
- sql - 在 MS SQL Server 中创建索引时,INCLUDE() 函数的作用是什么?
- python - 如何从仪表板调用 python 函数?
- javascript - Axios API 返回 Promise
- python-3.x - 在 python 中读取正在运行的日志文件,并能够在某个字符串或事件发生时创建输出标志
- node.js - MongoDB - 何时添加子文档以及何时引用
- r - 尝试在 R 中创建晶格时,我不断收到“乐趣错误(键 = 基数”)
- ios - UIScrollView bar 插入标签栏和导航栏的大小