SED가 종료되지 않았습니다.

SED가 종료되지 않았습니다.

다음 코드를 사용하여 macOS의 디렉터리 내용을 나열합니다.

#!/bin/bash

echo "hello User"
echo ""
userdir=$1
var_one=$userdir\/Library\/Application\ Support\/iCloud\/Accounts\/
    if [ -d "$var_one" ]
    then
        # echo "Direcotry exists"
        echo "The AppleID is : "
        sed -n '/[*\w-]+@([\w-]+\.)+[\w-]+/p'|ls "$var_one"|awk NR==2'{print}'
        echo "~~~~~~~BYE~~~~~~" 
        break
    else
        echo "Directory doesn't exists" 
        echo "The path is $var_one"
    fi  

디렉터리가 존재하는 경우 정규식 패턴과 함께 sed 명령을 사용하여 필요한 파일을 식별합니다. 스크립트는 제대로 작동하지만 종료되지 않는 것 같습니다.

답변1

스크립트에는 개선할 수 있는 일부 영역이 있습니다.

첫째, sed입력을 받지 않기 때문에 아무 작업도 수행하지 않습니다. 이는 사용자가 키보드에서 표준 입력 스트림으로 무언가를 입력하기를 기다리고 있음을 의미합니다. 또한 파일 이름에 sed다른 텍스트 편집 도구( 등)를 사용하지 마십시오 awk. Unix 시스템의 파일 이름은 줄 바꿈을 포함할 수 있으며 sed(예를 들어) 별도의 줄을 읽을 수 있습니다. 즉, 줄 바꿈이 포함된 파일 이름을 두 개의 별도 항목으로 읽습니다.

파일 이름에 개행 문자가 포함되는 것은 흔하지 않지만 스크립트가 이를 고려하지 않으면 악의적인 사용자가가능 가능스크립트가 의도하지 않은 작업을 수행하도록 혼동하려면 이 사실을 활용하세요.

현재 로그인된 Apple ID를 찾으려면 일부 경험적 방법을 사용하는 대신 이를 수행할 수 있는 도구를 사용하십시오. Homebrew를 사용하면 다음을 설치할 수 있습니다 mas.

brew install mas

그 다음에,

mas account

현재 로그인한 Apple ID가 제공됩니다.

답변2

교체해 보세요:

sed -n '/[*\w-]+@([\w-]+\.)+[\w-]+/p'|ls "$var_one"|awk NR==2'{print}'

이 같은:

ls "$var_one" | sed -n '2{/[*\w-]+@([\w-]+\.)+[\w-]+/p}'

또한보십시오: 아니요구문 분석 ls(대신 무엇을 해야 할까요)?

관련 정보