スクリプトの最後でコマンドを実行します。

スクリプトの最後でコマンドを実行します。

いくつかのファイルをコピーしたいのですが、スクリプトが終了するまでコピーコマンドの実行を待ちたいと思います。その理由は、ユーザーの入力によってスクリプトが途中で中断されることが予想され、ディレクトリを部分的にコピーしないためです。

exit 0同じプログラムで特定のコマンドが実行されるのを待つ方法はありますか?

#!/bin/bash
for f in 'find something/ -newer something_else -type f'; do
   #Expecting user input interruption
   cp "$f" . #I want to wait executing this
done

if [ -f something_else ]; then
   exit 0 #I want it executed here
else 
   exit 1
fi

答え1

最も簡単な解決策は後でコピーすることです。

#!/bin/bash

# something something script stuff

[ ! -f somefile ] && exit 1

find something -type f -newer somefile -exec cp {} . ';'

ユーザーに各コピーを確認させるには、次の-ok代わりに使用します。-execfind

find something -type f -newer somefile -ok cp {} . ';'

まず、ファイルを繰り返しコピーするファイルのリストを作成し、ユーザーに各ファイルの入力を要求します。それからコピーを実行するには:

copy_these=$(mktemp)

find something -type newer somefile \
    -exec bash -c '
        read -p "Copy $0? [y/n/q]: "
        case "$REPLY" in
            [yY]*) printf "%s\n" "$0" ;;
            [qQ]*) exit 1 ;;
        esac' {} ';' >"$copy_these"

# do other stuff

# then copy the files

xargs cp -t . <"$copy_these"

rm -f "$copy_these"

これは、すべてのファイル名が正しく機能し(改行なし)、cpGNUが使用されていると仮定します。

関連情報