경로에서 모든 스크립트를 실행하는 방법은 무엇입니까?


13

경로를 매개 변수로받는 스크립트가 있다고 가정하십시오. 해당 경로에있는 모든 스크립트를 어떻게 실행할 수 있습니까?

답변:


14

경로를 의미한다고 가정하면 디렉토리의 경로를 의미합니다 run-parts. 보낸 사람 man run-parts:

run-parts - run scripts or programs in a directory

처음에는 실행하려는 모든 스크립트에 대해 실행 권한을 설정해야합니다. 일반적으로 run-parts디렉토리 및 실행 파일이 아닌 파일은 해당 디렉토리에 있습니다.

실행하기 전에 --test옵션 으로 어떤 파일이 실행 될지 확인해야합니다 .

run-parts --test /path/to/directory

run-parts스크립트가 실행되도록 엄격한 명명 규칙이 있음 을 언급해야합니다 .

If neither the --lsbsysinit option nor the --regex option is given 
then the names must consist entirely of ASCII upper- and
lower-case letters, ASCII digits, ASCII underscores, and ASCII minus-hyphens.

man run-parts더 많은 아이디어를 얻으려면 확인하십시오 .


조금만 읽고, 나는 이것을 찾았습니다 : #! / bin / bash scripts_to_run_dir = / home / you / Dropbox / scripts_to_run "$ scripts_to_run_dir"/ *의 스크립트에 대해 테스트 -x "$ script"; 그런 다음 "$ script"fi done 나에게 효과가 있다고 생각하십니까?
Lautaro Alvarez

해당 스크립트 뭐 @LautaroAlvarez, 쉽게 간단한 명령을 수행 할 수 있습니다 run-parts /home/you/Dropbox/scripts_to_run.. 비록 이름에주의 ..be
heemayl

런 부품이 멋지다. 그러나 cron.d를 만들었고 cron.notice로 syslog에 씁니다. 그러나 그것은 임시 및 백업 파일을 건너 뛰는 것과 같은 좋은 아이디어의 원천입니다.
mmv-ru

9

스크립트의 이름이 올바른 경우 런 파트가 작동합니다. run-parts복잡한 이름 지정 체계 에 맞게 스크립트 이름을 바꾸고 싶지 않은 경우 다음과 같이 간단한 작업을 수행 할 수 있습니다.

for file in ~/target/*; do $file 2>/dev/null; done

그러면에서 찾은 모든 파일 및 디렉토리를 실행하려고 시도합니다 ~/target. 2>/dev/null디렉토리 또는 비 실행 파일을 실행하려고 할 때 리디렉션 오류 메시지는 불평하지 않도록.

또는 더 정교하게 시도 할 수 있습니다

for file in ~/target/*; do
    [ -f "$file" ] && [ -x "$file" ] && "$file"
done

그러면 각 결과가 파일인지 ( [ -f $file ]), 실행 [ -x $file ]가능한지 ( )를 확인하고 두 테스트가 모두 성공한 경우에만 파일을 실행하려고 시도합니다.


이것은 내가 작업중 인 프로젝트 (포크 레포)에서 완벽하게 작동했습니다 -github.com/rattfieldnz/Vaprobash/blob/master/setup_projects.sh .
Rob
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.