2013-02-21 3 views
0

Это вопрос, который вы задаете здесь Shell script to execute nohup against an inputed filename.Скрипт оболочки для nohup каждого файла в каталоге

Я просто пытаюсь найти, чтобы изменить скрипт no_hup ниже для выполнения всего каталога SQL-скриптов, а не только одного файла. Поэтому я пытаюсь найти хороший способ изменить приведенный ниже сценарий для исключения всего каталога файлов:

Как написать сценарий оболочки, чтобы я мог работать с каталогом с тестом, который содержит файлы foo1.sql, foo2.sql, foo3.sql

./nohup_sh тест

, который будет производить Ouput

поЬир PSQL -d -f дб тестовый/foo1.sql> & тест/foo1. out &

поЬир PSQL -d -f дб тест/foo2.sql> & тест/foo2.out &

поЬир PSQL -d -f дб тест/foo3.sql> & тест/foo3.out &

Это код, который я использую из предыдущего ответа называется nohup_sh

#!/bin/bash 

outputFile="$(echo $1 | cut -d\. -f 1).out" 

nohup psql -d db -f "$1" >& "$outputFile" & 

ответ

5
#!/bin/bash 

for file; do 
    nohup psql -d db -f "$file" >& "${file%.*}.out" & 
done 

${file%.*} является bash parameter expansion выполнять так же, как ваш cut команды, но с bash builtin

for file является обобщающим для for file in "[email protected]"

Usage:

./script.bash sql_dir/*.sql 

или

./script.bash *.sql 
+0

'$ {file%. *}' Is ** not ** то же, что и 'cut -d. -f 1'. Это то же самое, что и 'awk -v FS =. -v OFS =. 'NF -' '(то есть только последнее поле). Эквивалентное расширение параметра для этой команды cut: '$ {file %%. *}' –

1

Следующие сценарии поиска для любого *.sql файлов в каталоге, переданных в качестве аргумента, и выполняет желаемую команду nohup. Найденные имена файлов разделяются нулевыми байтами, чтобы избежать проблем с пробелами или подстановочными знаками в именах файлов.

#!/bin/bash 
if [[ -d "$1" ]]; then 
    find "$1/" -type f -name "*.sql" -print0 | while read -rd $'\0' file; do 
     nohup psql -d db -f "$file" >& "${file%.*}.out" & 
    done 
else 
    echo "$1 is no directory" 
    exit 1 
fi 
exit 0 

Назовите это как script.sh somedir.

+0

'для файла в $ (find $ 1/-name" * .sql ")' является ошибкой: скрипт не обрабатывает файлы с пробелы в именах файлов –

+0

@sputnick Спасибо за замечание, теперь нужно исправлять. – speakr

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