Angehefteter Tweet

่ฐทๆญๆต่งๅจๅคๅผๅ่บซๆนๆณ
ๆ็็ต่ๆฏMAC M1็๏ผ็ปๅๅคงไฝฌไปฌ็ๆป็ฅ๏ผๆ็ ็ฉถไบไธไธGoogleๅฎไพๅคๅผ๏ผๅฏ่ฝๆไบๆธๅ่ฟไธๅคชๆธ
ๆฅๅคงไฝฌ็ๆป็ฅ๏ผๆไปฅๆ่ฟ้่ฏฆ็ป็ๅไธไปฝ้ๅธธ็ฎๅ็ๅฐ็ฝไนๆฒก้ฎ้ข็ๅ
ฌ่ทฏ๏ผไฝฟ็จๅฝไปคโ่ฐทๆญๅคๅผโใๅ
็ๅฎไธ่ฆ็ๆฅๅผๅง๏ผๆไผๆๆๆๅฐ็ฝๅ
ณๅฟ็้ฎ้ข้ฝๅๅจไธ้ข๏ผไปฅไธๆฏๆญฅ้ชค่ฏฆ่งฃ๏ผ
ไธใๅๅปบๅคไธชๅฎไพ
1.่ฟๅ
ฅไฝ ๆณ่ฆๅฎ่ฃ
็็ฎๅฝๅๅปบๆไปถๅคน
mkdir -p Chrome_Profiles/Profile_{1..10}
2.ๅจไฝ ๅๅ็็ฎๅฝๅๅปบๅฏๅจ่ๆฌ๏ผ็ถๅ็ผๅ่ฟไธชๆไปถ
touch chrome_profiles.sh
็ถๅไฝ ่ฝ็ๅฐ็ๆไบ่ฟไธชๆไปถ๏ผ็ถๅโๅณ้ฎโ็นๅป่ฟไธชๆไปถ๏ผโๆๆฌ็ผ่พโๆๅผ๏ผๆไปฅไธๅ
ๅฎนๅคๅถ่ฟๅปๅ๏ผๅ
ณ้ญใ(ๆณจๆ็ฌฌไธๅๆฐ้ฃ้็XXๆฏไฝ ็่ทฏๅพ๏ผๆฅ็่ทฏๅพไฝฟ็จpwd๏ผๆ่
ๅณ้ฎ็นๅปๅพไธญ่ฟ้ๅคๅถ)
#!/bin/bash
# ๅฎไนๅๆฐ
APPS_DIR="/Users/XX/Chrome/Chromeๅฎไพๅบ็จ" # ็ๆ็็ฌ็ซๅบ็จๅญๆพ็ฎๅฝ
MAX_PROFILES=10
# ๆฃๆฅ่พๅ
ฅๅๆฐ
if [ $# -eq 0 ]; then
echo "้่ฏฏ๏ผๅฅฝๅฅฝๆฃๆฅ่ทฏๅพๆฏๅฆไธ่ด"
exit 1
fi
input="$1"
# ่งฃๆ่พๅ
ฅ๏ผๆฏๆ้ๅทๅ่ๅด๏ผ
IFS=',' read -ra PARTS <<< "$input"
declare -a PROFILES_TO_OPEN=()
for part in "${PARTS[@]}"; do
if [[ "$part" =~ ^[0-9]+(-[0-9]+)?$ ]]; then
if [[ "$part" == *"-"* ]]; then
start=$(cut -d '-' -f1 <<< "$part")
end=$(cut -d '-' -f2 <<< "$part")
if [ "$start" -gt "$end" ]; then
echo "้่ฏฏ๏ผ่ๅด $part ็่ตทๅงๅผๅคงไบ็ปๆๅผ"
exit 1
fi
for ((i=start; i<=end; i++)); do
PROFILES_TO_OPEN+=("$i")
done
else
PROFILES_TO_OPEN+=("$part")
fi
else
echo "้่ฏฏ๏ผๆ ๆ็่พๅ
ฅ้จๅ '$part'"
exit 1
fi
done
# ๅป้ๅนถ้ช่ฏ่ๅด
PROFILES_TO_OPEN=($(printf "%s\n" "${PROFILES_TO_OPEN[@]}" | sort -nu))
for i in "${PROFILES_TO_OPEN[@]}"; do
if [ "$i" -lt 1 ] || [ "$i" -gt "$MAX_PROFILES" ]; then
echo "้่ฏฏ๏ผๅฎไพ็ผๅท $i ่ถ
ๅบ 1-$MAX_PROFILES ็่ๅด"
exit 1
fi
done
# ้่ฟ .app ๆไปถๅฏๅจๅฎไพ
for i in "${PROFILES_TO_OPEN[@]}"; do
APP_PATH="$APPS_DIR/Chromeๅฎไพ$i.app"
if [ -d "$APP_PATH" ]; then
echo "ๆญฃๅจๅฏๅจๅฎไพ $i..."
open "$APP_PATH"
# ๆฅๅฟ่ฎฐๅฝ๏ผๆๆฅๆๅๅฒๆฅๅฟ๏ผ
LOG_FILE="/tmp/chrome_profiles_$(date '+%Y%m%d').log"
echo "$(date '+%Y-%m-%d %H:%M:%S') - ๅฎไพ $i ๅทฒๅฏๅจ" >> "$LOG_FILE"
else
echo "้่ฏฏ๏ผๅบ็จ $APP_PATH ไธๅญๅจ"
# ่ฎฐๅฝ้่ฏฏๆฅๅฟ
LOG_FILE="/tmp/chrome_profiles_$(date '+%Y%m%d').log"
echo "$(date '+%Y-%m-%d %H:%M:%S') - ้่ฏฏ๏ผๅบ็จ $APP_PATH ไธๅญๅจ" >> "$LOG_FILE"
fi
done
echo "ๅทฒๅฏๅจๅฎไพ๏ผ${PROFILES_TO_OPEN[*]}"
ไปฅไธๆฏๅ
ๅฎน๏ผไธ่ฆๅคๅถๆฌๆฎต่ฏใ
3.ๅๅปบ็ๆGoogle็ๅฎไพๆไปถcreate_chrome_apps.sh
touch create_chrome_apps.sh
ๅๆ ท็ๆนๆณ๏ผๆๆฌ็ผ่พ็นๅผ็ฒ่ดดๅคๅถไปฅไธๅ
ๅฎน๏ผ
#!/bin/bash
# ๅฎไน้
็ฝฎ
CHROME_PROFILES_DIR="/Users/XX/Chrome/Chrome_Profiles" # ไฝ ็้
็ฝฎ็ฎๅฝ
TOTAL_INSTANCES=10 # ๅฎไพๆปๆฐ
APPS_OUTPUT_DIR="/Users/XX/Chrome/Chromeๅฎไพๅบ็จ" # ็ๆ็็ฌ็ซๅบ็จๅญๆพ็ฎๅฝ
# ๆธ
็ๅนถ้ๅปบ่พๅบ็ฎๅฝ
rm -rf "$APPS_OUTPUT_DIR"
mkdir -p "$APPS_OUTPUT_DIR"
# ็ๆ็ฌ็ซๅบ็จ
for i in $(seq 1 $TOTAL_INSTANCES); do
APP_NAME="Chromeๅฎไพ$i"
APP_PATH="$APPS_OUTPUT_DIR/$APP_NAME.app"
# ๅๅปบๅบ็จ็ปๆ
mkdir -p "$APP_PATH/Contents/MacOS"
mkdir -p "$APP_PATH/Contents/Resources"
# ็ๆๅฏๅจ่ๆฌ
cat < "$APP_PATH/Contents/MacOS/ChromeLauncher"
#!/bin/bash
PROFILE_DIR="$CHROME_PROFILES_DIR/Profile_$i"
mkdir -p "\$PROFILE_DIR"
exec open -na "Google Chrome" --args --user-data-dir="\$PROFILE_DIR"
EOF
chmod +x "$APP_PATH/Contents/MacOS/ChromeLauncher"
# ็ๆ Info.plist ๆไปถ๏ผๅฎไนๅบ็จๅ็งฐๅๅพๆ ๏ผ
cat < "$APP_PATH/Contents/Info.plist"
apple.com/DTDs/PropertyLโฆ">
CFBundleExecutable
ChromeLauncher
CFBundleName
$APP_NAME
CFBundleIdentifier
com.chrome.instance.$i
CFBundleIconFile
AppIcon
EOF
# ๅคๅถ Chrome ๅพๆ ๏ผๅฏ้๏ผ
cp "/Applications/Google Chrome.app/Contents/Resouโฆ" "$APP_PATH/Contents/Resources/AppIcon.icns"
echo "ๅทฒ็ๆๅบ็จ: $APP_NAME.app"
done
echo "ๆๆ็ฌ็ซๅบ็จๅทฒ็ๆๅฐ: $APPS_OUTPUT_DIR"
4.ๅๆ ทๅจ็ฎๅฝไธญๅๅปบโๅ
ณ้ญโ็่ๆฌ๏ผๅฝ็ถไฝ ๅฏไปฅไธไธชไธไธชๅ
ณ้ญ๏ผๅฐฑไธ้่ฆ่ฟไธๆญฅใ
touch close_chrome_profiles.sh
ๆฅ็โๆๆฌ็ผ่พโๆๅผๅ๏ผ็ฒ่ดดไปฅไธๅ
ๅฎน๏ผ
#!/bin/bash
CHROME_PROFILES_DIR="/Users/XX/Chrome/Chrome_Profiles"
MAX_PROFILES=10 # ๅฎไพๆฐ้
if [ $# -eq 0 ]; then
echo "้่ฏฏ๏ผๅฅฝๅฅฝๆฃๆฅ่ทฏๅพๆฏๅฆ็ปไธ"
exit 1
fi
input="$1"
if [ "$input" == "all" ]; then
pkill -f "Google Chrome.*--user-data-dir=.*/Profile_"
echo "ๅทฒๅ
ณ้ญๆๆ Chrome ๅฎไพ"
exit 0
fi
IFS=',' read -ra PARTS <<< "$input"
declare -a PROFILES_TO_CLOSE=()
for part in "${PARTS[@]}"; do
if [[ "$part" =~ ^[0-9]+(-[0-9]+)?$ ]]; then
if [[ "$part" == *"-"* ]]; then
start=$(cut -d '-' -f1 <<< "$part")
end=$(cut -d '-' -f2 <<< "$part")
if [ "$start" -gt "$end" ]; then
echo "้่ฏฏ๏ผ่ๅด $part ็่ตทๅงๅผๅคงไบ็ปๆๅผ"
exit 1
fi
for ((i=start; i<=end; i++)); do
PROFILES_TO_CLOSE+=("$i")
done
else
PROFILES_TO_CLOSE+=("$part")
fi
else
echo "้่ฏฏ๏ผๆ ๆ็่พๅ
ฅ้จๅ '$part'"
exit 1
fi
done
PROFILES_TO_CLOSE=($(printf "%s\n" "${PROFILES_TO_CLOSE[@]}" | sort -nu))
for i in "${PROFILES_TO_CLOSE[@]}"; do
if [ "$i" -lt 1 ] || [ "$i" -gt "$MAX_PROFILES" ]; then
echo "้่ฏฏ๏ผๅฎไพ็ผๅท $i ่ถ
ๅบ 1-$MAX_PROFILES ็่ๅด"
exit 1
fi
done
for i in "${PROFILES_TO_CLOSE[@]}"; do
pids=$(pgrep -f "Google Chrome.*--user-data-dir=.*/Profile_$i(\s|$)")
if [ -n "$pids" ]; then
echo "ๆญฃๅจๅ
ณ้ญๅฎไพ $i (PID: $pids)..."
kill -9 $pids
else
echo "่ญฆๅ๏ผๅฎไพ $i ๆชๅจ่ฟ่ก"
fi
done
echo "ๆไฝๅฎๆ๏ผ"
ไปฅไธๆฏ่ๆฌๅ
ๅฎน๏ผไธ่ฆๅคๅถๆฌๆฎต่ฏใ
ๅฆๆไฝ ๆ็
งไปฅไธๆนๆณ๏ผ้ฃๅฐ่ฟ้ๅฐฑ็ฎๅฎๆไบใ


ไธญๆ



















