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"
출력 : : 그 cmd를 실행하면
가# ./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
#
출력 :
# num=`find /tmp/ -mtime -365 | grep -v "file1" | grep -v "file2" | grep -v "file3" | wc -l`
# echo $num
10
#
이로 인해'|'주위에 따옴표가 생깁니다. 그래서 실제로 실행하려고하는 명령은'find/tmp/-mtime -365 '|'입니다. grep -v ' "file1"' '|' grep -v ' "file2"' '|' grep -v ' "file3"' '|' 머리 '|' wc -l'. 파일의 맨 위에'#!/bin/bash -x'를 추가하면 이것을 볼 수 있습니다. – user650654