2015-10-21 2 views
0

Имени файла: Дерево (исполняемый)скрипт перенаправление вывода команды в последний имени файла аргумент

#!/bin/bash 
for i in $* 
do 
    if [ -d $i ]; then 

     echo "===================$i================" >> ????? 
     tree -L 1 $i >> ????? 
    fi 
done 

Как вы видите, я хочу перечислить древовидную структуру параметров, которые я ввод, я хочу, чтобы вся древовидная структура перенаправляется на последний файл (это id $ #), это "?????" в этом скрипте, потому что я не знаю, как его написать.

Например:

./Tree ./* README 

ДА, все директории структуры дерева будет писать в README!

+2

Вы можете просто написать в stdout и позволить пользователю перенаправлять туда, где они хотят: './Tree ./*> README'. Таким образом, они могли просматривать вывод на экране или транслировать его на «меньше» или что у вас есть. –

ответ

2

Было бы лучше, чтобы поставить имя выходного файла первый, так что он не вмешивается в список переменной длины файлов итерации по:

#!/bin/bash 
output=$1 
shift 

for i in "[email protected]"; 
do 
    if [ -d "$i" ]; then 

     echo "===================$i================" 
     tree -L 1 "$i" 
    fi 
done > "$output" 

Затем вызовите скрипт как

./Tree README ./* 

Более того, нет необходимости передавать имя выходного файла в сценарий; просто позвольте сценарию писать на стандартный вывод и выполнять перенаправление снаружи.

./Tree ./* > README 
+3

Вы должны, вероятно, посоветовать использовать '' $ @ "' и '' $ i "'. –

+0

Если я просто хочу только поставить выходной файл, что мне делать? –

3

Было бы проще/проще сделать это, если ваш выходной файл был первый аргумент вместо последнего.

Это просто нужно будет

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 к ${#@} (длина [email protected], которая является счетчиком аргументов скрипту).

+0

Большое спасибо! –

Смежные вопросы