2016-10-11 2 views
2

아래 스크립트의 결과를 파일로 쪼개는 데 문제가 있습니다. 아래 스크립트를 실행하면 filecheck_output 파일에 아무 것도 기록되지 않습니다.bash 스크립트의 결과를 텍스트 파일로 변환

#!/bin/bash 

cd /var/www/html/images/ 
results="$(find projects -name "*.*" | sort -n)" 

echo "${results}" > filecheck_output 

스크립트의 이름은 filecheck입니다. 스크립트의 끝에서 > filecheck_output 섹션을 제거하고 명령 줄에서 ./filecheck > filecheck_output을 실행하면 스크립트가 실행되어 filecheck_output 파일에 결과를 아무런 문제없이 출력합니다.

출력이 스크립트에서가 아니라 명령 프롬프트에서 실행될 때 왜 리다이렉션됩니까?

+3

죄송 합니다만'/ var/www/html/images /'또는'/ home' 디렉토리 또는'/ usr/local/bin' 또는'filecheck'가 저장되어있는 곳이라면 . 그것은'/ var/www/html/images /'에 있어야합니다. 스크립트로 실행할 때 사용 권한 오류 메시지가 표시되지 않도록하십시오. 행운을 빕니다. – shellter

+1

@shellter - 답변으로 게시해야한다고 생각합니다. – MByD

+0

@MByD : 감사합니다. 3 개의 상향 보를보기 좋게. 그러나 나는 본격적인 답변에 대한 수용이나 상영을 지켜보고 싶지 않다 ;-) 다른 사람들은 자유롭게 이것을 대답으로 올릴 수있다. (그리고 아마도 하나 더 추가 할 수도있다 ;-)). 모두에게 행운을 빕니다! – shellter

답변

0

다른 언급했듯이 전체 경로 또는 filecheck_ouput의 상대 경로를 스크립트에 넣어야합니다.

#!/bin/bash 

cd /var/www/html/images/ 
results="$(find projects -name "*.*" | sort -n)" 

echo "${results}" > /home/fedorqui/filecheck_output 
1

귀하의 용어는 꺼져 있습니다. 출력을 파일로 리디렉션하고 싶습니다. 파이프에 뭔가가 하나의 명령에서 출력을 받아 다른 사람에게 먹이려는 것을 의미합니다 (find | sort처럼). 임시 변수에 결과를 캡처

은 단순히 낭비, 그래서 당신은 정말 출력 파일은 분명히 그 디렉토리에 생성 할 수 있도록 스크립트는 이전에 cd을 수행 다만

find projects -name "*.*" | sort -n >filecheck_output 

찾고 있습니다. 이를 피하려면 cd을 사용하지 않거나 서브 쉘에서 cd을 수행하십시오. 후자의 경우

(cd somewhere; find projects) | sort -n >filecheck_output 

find somewhere/projects | sort -n >filecheck_output 

, find로부터의 출력은 모든 발생하는 결과의 somewhere 경로를 포함 할 것이다. 서브 쉘 (subhell) 솔루션보다 더 부서지기는하지만 sed으로 후 처리 할 수 ​​있습니다.

스크립트 자체에서 리디렉션하지 않는 것이 재사용을 가능하게하는 가장 좋은 방법 인 것 같습니다. 원하는 경우 다른 파일을 실행할 때마다 다른 출력 파일을 선택할 수 있으므로 사용하기 편리합니다. while 디렉토리 집합이나 다른 어떤 것에 대한 루프.

관련 문제