![](/img/trans.png)
[英]Redirect output of just one command to different file than rest of script
[英]Script redirect command output to last filename argument
文件名:Tree(可执行文件)
#!/bin/bash
for i in $*
do
if [ -d $i ]; then
echo "===================$i================" >> ?????
tree -L 1 $i >> ?????
fi
done
如您所见,我想列出我输入的参数的树形结构,我想让所有树形结构重定向到最后一个文件(其ID为$#),它是“ ????????” 在此脚本中,因为我不知道该怎么写。
例如:
./Tree ./* README
是的,所有目录树结构都将写入README!
如果您的输出文件是第一个参数而不是最后一个参数,则这样做会更容易/更简单。
那只需要
output=$1
shift
添加到脚本的顶部。
使用最后一个参数并不难,实际上它只涉及更多“高级”变量用法:
#!/bin/bash
output="${@: -1}"
for i in "${@:0:${#@}}"
do
if [ -d "$i" ]; then
echo "===================$i================" >> "$output"
tree -L 1 "$i" >> "$output"
fi
done
其中"${@: -1}"
是参数数组中的最后一个元素, "${@:0:${#@}}"
是从0
到${#@}
(长度为$@
,这是脚本参数的数量)。
最好将输出文件名放在首位 ,以免干扰迭代的文件的可变长度列表:
#!/bin/bash
output=$1
shift
for i in "$@";
do
if [ -d "$i" ]; then
echo "===================$i================"
tree -L 1 "$i"
fi
done > "$output"
然后将您的脚本称为
./Tree README ./*
更好的是,实际上不需要将输出文件的名称传递给脚本。 只需让脚本写入标准输出并在外部进行重定向即可。
./Tree ./* > README
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.