繁体   English   中英

脚本重定向命令输出到最后一个文件名参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM