Имам скрипт, /home/user/me/my_script.sh, който се предполага, че преминава през множество директории и обработва файлове. Текущата ми работна директория е /home/user/me. Извикването на ls -R дава:
./проекти:
dir1 dir2 dir3
./projects/dir1:
image1.ntf points2.csv image1.img image1.hdr
./projects/dir2:
image2.ntf points2.csv image2.img image2.hdr
./projects/dir3:
image3.ntf points3.csv image3.img image3.hdr
Имам този скрипт:
#! /bin/bash -f
for $dir in $1*
do
echo $dir
set cmd = `/home/tools/tool.sh -i $dir/*.ntf -flag1 -flag2 -flag3 opt3`
$cmd
done
Ето как се изпълнява (от cwd /home/user/me) и резултатът:
bash-4.1$ ./myscript.sh projects/
projects/*
bash-4.1$
Това не е очакваният резултат. Очакваният резултат е:
bash-4.1$ ./myscript.sh projects/
projects/dir1
[output from tool.sh]
projects/dir2
[output from tool.sh]
projects/dir3
[output from tool.sh]
bash-4.1$
Това, което трябва да се случи, е, че скриптът трябва да влезе в първата директория, да намери *.ntf файла и да го прехвърли на tool.sh. В този момент щях да започна да виждам резултат от този инструмент. Изпълних инструмента на един файл:
bash-4.1$ /home/tools/tool.sh -i /home/user/me/projects/dir1/image1.ntf -flag1 -flag2 -flag3 opt3
[expected output from tool. lengthy.]
bash-4.1$
Пробвах синтаксис, намерен тук: Как да преминавам през директории в Linux? и тук: Обикаляне на директории в Bash
for $dir in /$1*/
do ...
Резултат:
bash-4.1$ ./myscript.sh projects/
/projects/*/
И:
for $dir in $1/*
do ...
Резултат:
bash-4.1$ ./myscript.sh projects
projects/*
Не съм сигурен колко други повторения на заместващ знак и наклонена черта мога да измисля. Какъв е правилният синтаксис?
tool.sh
набор от команди ли е или някакъв друг изход? - person ghoti   schedule 28.06.2018$cmd
на изхода на скрипта и след това изпълнявате този изход, сякаш е команда. Какво е вашето намерение с тази променлива? Защо просто не стартирате инструмента директно? (Чувствайте се свободни да отговорите, като изясните въпроса си, а не коментари.) - person ghoti   schedule 28.06.2018