제가 뭔가 잘못 이해한 것인지, 아니면 검색을 잘못한 것인지 잘 모르겠습니다. 그러나 문제가 있습니다. $SYNC와 일치하는 문자열 부분을 바꾸기 위해 간단한 echo 명령과 sed에 대한 파이핑을 사용하여 테스트하고 있으며 이를 /home/pi/sync로 바꿉니다.
제가 테스트했던 내용은 다음과 같습니다.
echo '$SYNC/somedirectory' | sed 's|"$SYNC"|"/home/pi/sync"|'
그건 계속 돌려주는 거야
$SYNC/somedirectory
내가 이해한 바로는 위의 sed 명령은 $SYNC를 /home/pi/sync로 대체합니다.
다음과 같이 더 큰 라인에서 사용하겠습니다.
grep -w "file_path =" /home/pi/lightshowpi/config/state.cfg | sed 's/.*= //'| (this is where I need to replace the $SYNC with /home/pi/sync) | xargs mp3info -p "%a"
기본적으로 파일 경로가 있는 행을 가져오고 "=" 뒤의 모든 항목을 가져오고 $SYNC/file.mp3를 반환합니다. 그런 다음 mp3info로 파이프하여 mp3 정보를 가져올 수 있습니다.
두 번째 sed 명령 없이 시도했지만 환경 변수가 확장되지 않고 해당 디렉터리가 없다는 오류가 반환됩니다. 예:
$SYNC/mp3file.mp3 does not exist
그러나 $SYNC를 /home/pi/sync/mp3file.mp3로 수동으로 바꾸면 제대로 작동합니다.
나는 sed를 사용하지 않고 다른 방법을 사용할 수 있습니다. sed가 가장 쉬운 방법이 될 것이라고 생각합니다.
답변1
답을 찾았습니다. 쉘에 대한 경험이 부족해서 발생한 단순한 실수였습니다.
grep -w "file_path =" /home/pi/lightshowpi/config/state.cfg | sed 's/.*= //'| sed 's|'\$SYNC'|'/home/pi/sync'|' | xargs mp3info -p "%a"