2017-12-25 23 views
0

난이 :은 zenity 폴더 선택 내용과 가변의 sed를 사용하여

dir="null" 

if [ $dir = "null" ] || [ $$dir = "" ] || [ $dir = "1" ] || [ $dir = "0" ]; then 
zenity --info --tittle="Launcher Config" --text="locate your server folder" 
way="$(zenity --file-selection --directory)" 
zenity --info --text="$way" 
sed -i 's/^dir=.*/dir="'$way'"/' ls.sh 

하지만 단말기를 반환 : 나는 UU에게

+0

는'$ Sway' 단지 오타 아닌가요 시도? 다른 곳에서는'way'를 사용하고 있습니다 ... –

+0

@RolandSmith 오타일 수도 있지만 오류 메시지의 원인 일 수는 없습니다. 오류 메시지는 세 번째'/'뒤에 문자가 있어야하며'sed '는 이해하지 못한다고 말합니다. 그리고'/'를 종료 한 후에는 문자가 없으므로, 대체 문자열에는'sed '로는 알 수없는 문자가 뒤따라야합니다. – ceving

+0

모든 변수 참조를 큰 따옴표로 묶어야합니다. 예를 들어,'[$ dir = "null"]'은'$ dir'이 공백이거나 공백이나 와일드 카드를 포함하면 에러가납니다. 또한,'[$$ dir = ""]'나는'$$'이 쉘 프로세스의 PID로 확장된다는 사실을 배웠다. –

답변

1

을 무엇을 의미하는지 잘 모릅니다

sed: -e expression #1, character 16: unknown option for the command 's' (s///?) 

$way에는 /이 포함되어 있습니다. 문자열을 연결하여 sed 프로그램을 작성하는 경우 모든 문자를 sed 표현식의 특별한 의미로 인용해야합니다.

sed -i "s/^dir=.*/dir=${way//\//\\/}/" ls.sh 
+0

은 이제 다음을 반환합니다. sed : -e expression # 1, character 18 : 명령 's'에 대해 알려지지 않은 옵션 (s ///?) 이전에 : 문자 16 – oblinez

+0

나는이 막대를 연구하여 스크립트에서 끝에 2 개의 막대가 있으며 그 중 하나만있었습니다 : sed -i "s/^ dir =. */dir = $ {way // \ // \\ //} /"ls.sh | sed -i "s/^ dir =. */dir = $ {way // \/\//} /"ls.sh – oblinez

+0

@oblinez가 고쳤습니다. – ceving