1

ファイルのリストに基づいてコマンドをビルドするbashスクリプトがあるので、コマンドはオンザフライでビルドされます。その場で構築するということは、変数に格納されることを意味します。次に、そのコマンドを実行して、出力を別の変数に格納します。コマンド置換を使用してコマンドを実行しようとすると、クラップスになります。変数がパイプを利用しているときに、コマンド置換を変数内のコマンドで機能させるにはどうすればよいですか?

これが私のスクリプトです:

# Finds number of files that are over 365 days old

ignored_files=( 'file1' 'file2' 'file3' )
path_to_examine="/tmp/"
newer_than=365

cmd="find $path_to_examine -mtime -$newer_than"
for file in "${ignored_files[@]}"; do
    cmd="$cmd | grep -v \"$file\""
done
cmd="$cmd | wc -l"
echo "Running: $cmd"
num_active_files=`$cmd`
echo "num files modified less than $newer_than days ago: $num_active_files"

そのプログラムを実行した場合の出力:

# ./test2.sh 
Running: find /tmp/ -mtime -365 | grep -v "file1" | grep -v "file2" | grep -v "file3" | wc -l
find: bad option |
find: [-H | -L] path-list predicate-list
# 

そのcmdを実行した場合の出力:

# num=`find /tmp/ -mtime -365 | grep -v "file1" | grep -v "file2" | grep -v "file3" | wc -l`
# echo $num
10
# 
4

1 に答える 1

4

eval次のコマンドを使用する必要があります。

num_active_files=`eval $var`

これにより、bashを動的に実行するための式を生成できます。

これがお役に立てば幸いです=)

于 2012-10-04T00:11:29.453 に答える