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(たとえば)、別々の行を読み取ることができます。つまり、改行を含むファイル名を2つの別々の項目として読み取ります。

ファイル名に改行文字が含まれていることは一般的ではありませんが、スクリプトがこれを考慮していない場合、悪意のあるユーザー可能スクリプトが意図しない操作を実行するのを混同するには、この事実を活用してください。

現在ログインしている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(代わりに何をすべきか)?

関連情報