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

Linux 脚本将命令输出重定向到最后一个文件名参数,linux,bash,shell,Linux,Bash,Shell,文件名:树(可执行文件) 如您所见,我想列出我输入的参数的树结构,我想让所有树结构重定向到最后一个文件(它的id是$#),在这个脚本中它是“??”,因为我不知道如何编写它 例如: ./Tree ./* README 是的,所有目录树结构都将在自述中写入 最好将输出文件的名称放在第一位,这样就不会干扰您迭代的可变长度文件列表: #!/bin/bash output=$1 shift for i in "$@"; do if [ -d "$i" ]; then ec

文件名:树(可执行文件)


如您所见,我想列出我输入的参数的树结构,我想让所有树结构重定向到最后一个文件(它的id是$#),在这个脚本中它是“??”,因为我不知道如何编写它

例如:

./Tree ./* README

是的,所有目录树结构都将在自述中写入

最好将输出文件的名称放在第一位,这样就不会干扰您迭代的可变长度文件列表:

#!/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

最好将输出文件的名称放在第一位,这样就不会干扰您迭代的可变长度文件列表:

#!/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

如果输出文件是第一个参数而不是最后一个参数,那么这样做会更容易/更简单

那只需要

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
${}
的参数(脚本参数计数的
$@
长度).

如果输出文件是第一个参数而不是最后一个参数,则执行此操作会更容易/更简单

那只需要

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
${}
的参数(脚本参数计数的
$@
长度)。这样,他们就可以在屏幕上查看输出,或将其传输到
less
或您拥有的任何内容。您只需写入stdout,让用户重定向到他们想要的任何地方:
/Tree./*>自述文件
。这样,他们就可以在屏幕上查看输出,或将其传输到
更少的
或您拥有的任何内容。您可能应该建议使用
“$@”
“$i”
。如果我只想将输出文件放在最后,我该怎么办?您可能应该建议使用
“$@”
“$i”
。如果我只想将输出文件放在最后,我该怎么办?