0

これは、ここに投稿された質問のフォローアップです。入力されたファイル名に対してnohupを実行するシェルスクリプト

単一のファイルではなく、SQLスクリプトのディレクトリ全体に対して実行するように、以下のno_hupスクリプトを変更しようとしています。だから私はファイルのディレクトリ全体に対して実行するために以下のスクリプトを変更する良い方法を見つけようとしています:

foo1.sql、foo2.sql、foo3.sqlファイルを含むtestというディレクトリに対して実行できるようにシェルスクリプトを作成するにはどうすればよいですか。

./nohup_shテスト

出力を生成します

nohup psql -d db -f test / foo1.sql>&test / foo1.out&

nohup psql -d db -f test / foo2.sql>&test / foo2.out&

nohup psql -d db -f test / foo3.sql>&test / foo3.out&

これは私がnohup_shと呼ばれる前の答えから使用しているコードです

#!/bin/bash

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

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

2 に答える 2

5
#!/bin/bash

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

${file%.*} コマンドと同じように実行するためのbashパラメーター展開ですが、cutbash builtin

for fileの省略形ですfor file in "$@"

使用法 :

./script.bash sql_dir/*.sql

また

./script.bash *.sql
于 2013-02-21T21:26:23.787 に答える
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ます。

于 2013-02-21T21:29:31.723 に答える