따라서 저는 bash 스크립팅을 처음 접했지만 다음과 같은 bash 작업을 원합니다.
게시물 타임스탬프를 만듭니다. (var 또는 파일로)
Feeds.txt라는 파일에서 행을 읽습니다.
전체 문자열에서 숫자 문자열을 두 개의 변수 $feedNum 및 $wholeString으로 분리합니다.
그런 다음 cat 명령을 실행하여 $wholeString이라는 새 파일을 만들거나 추가하고 timestamp.txt의 내용을 파일에 추가합니다.
마지막으로 wget 명령을 실행하여 $feedNum을 URL 문자열에 삽입하고 이전에 생성된 $wholeString 파일에 wget 응답을 출력합니다.
이것이 내가 가진 것입니다.
Feeds.txt는 다음과 같습니다(결국 더 길어집니다).
8147_feed_name.xml
19176_nextfeed_name.xml
제가 정리한 스크립트는 다음과 같았습니다.
#Changes the directory to the correct location
cd /home/scripts
# Inserts the proper timestamp in the file , postdating for one hour.
date -d '1 hour ago' "+%m/%d/%Y %H:%M:%S" >/home/scripts/timestamp.txt
#Loop Logic
for feedNum in `cat feeds.txt |cut -d _ -f 1`;do
for wholeString in `cat feeds.txt`; do
cat /home/scripts/timestamp.txt >>/home/scripts/tmp/$wholeString ;
wget https\://some.url.com/reports/uptimes/${feedNum}.xml?\&api_key=KEYKEYKEYKEY\&location=all\&start_date=recent_hour -O ->>/home/scripts/tmp/$wholeString;
done
done
내 문제는 4번 실행된다는 것입니다. 따라서 cat과 wget을 삭제하고 다음과 같이 간단한 echo로 바꾸면,
#Changes the directory to the correct location
cd /home/scripts
# Inserts the proper timestamp in the file , postdating for one hour.
date -d '1 hour ago' "+%m/%d/%Y %H:%M:%S" >/home/scripts/timestamp.txt
#Loop Logic
for feedNum in `cat feeds.txt |cut -d _ -f 1`;do
for wholeString in `cat feeds.txt`; do
echo $feedNum $wholeString
done
done
위쪽 줄과 아래쪽 줄이 올바른 이와 같은 출력을 얻습니다. 가운데 2개가 섞여있습니다.
8147 8147_feed_name.xml
8147 19176_nextfeed_name.xml
19176 8147_feed_name.xml
19176 19176_nextfeed_name.xml
왜 이런 일이 발생하는지 이해하지만 해결 방법은 모르겠습니다.
답변1
이렇게 하면 문자열 분할 문제가 해결됩니다(항상 그렇듯이 파일 이름의 공백에 주의하세요).
#Changes the directory to the correct location
cd /home/scripts
# Inserts the proper timestamp in the file , postdating for one hour.
date -d '1 hour ago' "+%m/%d/%Y %H:%M:%S" >/home/scripts/timestamp.txt
#Loop Logic
while IFS=_ read feedNum xmlFile; do
echo "$feedNum $xmlFile"
done < feeds.txt
wget
여기에서 호출을 수집하는 것은 간단해야 합니다.
답변2
OP 여기에는 다른 사용자 이름이 있습니다. 나는 당신이 게시한 첫 번째 코드인 DopeGhoti를 사용하게 되었습니다. 약간의 수정이 필요합니다. 소스 파일을 다시 읽고 각 파일을 가져오는 대신 줄을 잡고 실행하는 방법을 보여주셔서 감사합니다.
#Create Timestamp
date -d '1 hour ago' "+%m/%d/%Y %H:%M:%S" >/home/scripts/sitename/timestamp.txt
#Loop Logic
while read line; do
feedNum="$(echo "$line" | cut -d_ -f1)"
wholeString="$(echo "$line")"
cat /home/scripts/sitename/timestamp.txt >>/home/scripts/sitename/$wholeString
wget https\://my.sitename.com/reports/uptimes/${feedNum}.xml?\&api_key=KEY\&location=all\&start_date=recent_hour -O ->>/home/scripts/sitename/$wholeS$
done < feeds.txt
이를 통해 18개 피드 모두에 대한 올바른 출력이 제공됩니다.
감사합니다!