次のコードを使用して、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
(代わりに何をすべきか)?