আমি এমন একটি স্ক্রিপ্ট লিখছি যা ব্যবহারকারীর লগ ইন করার পরে কল হয়ে যায় এবং নির্দিষ্ট ফোল্ডারটি উপস্থিত আছে কিনা বা ভগ্ন সিমলিংক কিনা তা পরীক্ষা করে দেখছি। (এটি কোনও ম্যাক ওএস এক্স সিস্টেমে রয়েছে তবে প্রশ্নটি নিখুঁতভাবে বাশ।
এটি মার্জিত নয়, এবং এটি কাজ করছে না, তবে এখনই এটি দেখতে এটির মতো দেখাচ্ছে:
#!/bin/bash
# Often users have a messed up cache folder -- one that was redirected
# but now is just a broken symlink. This script checks to see if
# the cache folder is all right, and if not, deletes it
# so that the system can recreate it.
USERNAME=$3
if [ "$USERNAME" == "" ] ; then
echo "This script must be run at login!" >&2
exit 1
fi
DIR="~$USERNAME/Library/Caches"
cd $DIR || rm $DIR && echo "Removed misdirected Cache folder" && exit 0
echo "Cache folder was fine."
সমস্যার সরলতাটি হ'ল টিলডের সম্প্রসারণ আমার পছন্দ মতো কাজ করছে না।
আসুন আমরা বলতে পারি যে আমার একটি ব্যবহারকারী নাম আছে george
এবং তার হোম ফোল্ডারটি /a/path/to/georges_home
। যদি, একটি শেল এ, আমি টাইপ করুন:
cd ~george
এটি আমাকে উপযুক্ত ডিরেক্টরিতে নিয়ে যায়। যদি আমি টাইপ করি:
HOME_DIR=~george
echo $HOME_DIR
এটি আমাকে দেয়:
/a/path/to/georges_home
তবে, আমি যদি একটি চলক ব্যবহার করার চেষ্টা করি তবে এটি কার্যকর হয় না:
USERNAME="george"
cd ~$USERNAME
-bash: cd: ~george: No such file or directory
আমি উদ্ধৃতি এবং ব্যাকটিক্স ব্যবহার করার চেষ্টা করেছি, তবে কীভাবে এটি সঠিকভাবে প্রসারিত করা যায় তা বুঝতে পারি না। আমি এই কাজটি কীভাবে করব?
অভিযোজ্য বস্তু
আমি কেবল আমার সমাপ্ত স্ক্রিপ্টটি পোস্ট করতে চেয়েছিলাম (সত্যিই, এটি উপরে কাজ করার মতো কুৎসিত নয়!) এবং এটি ঠিক কাজ করছে বলে মনে হচ্ছে।
#!/bin/bash
# Often users have a messed up cache folder -- one that was redirected
# but now is just a broken symlink. This script checks to see if
# the cache folder is all right, and if not, deletes it
# so that the system can recreate it.
#set -x # turn on to help debug
USERNAME=$3 # Casper passes the user name as parameter 3
if [ "$USERNAME" == "" ] ; then
echo "This script must be run at login!" >&2
exit 1 # bail out, indicating failure
fi
CACHEDIR=`echo $(eval echo ~$USERNAME/Library/Caches)`
# Show what we've got
ls -ldF "$CACHEDIR"
if [ -d "$CACHEDIR" ] ; then
# The cache folder either exists or is a working symlink
# It doesn't really matter, but might as well output a message stating which
if [ -L "$CACHEDIR" ] ; then
echo "Working symlink found at $CACHEDIR was not removed."
else
echo "Normal directory found at $CACHEDIR was left untouched."
fi
else
# We almost certainly have a broken symlink instead of the directory
if [ -L "$CACHEDIR" ] ; then
echo "Removing broken symlink at $CACHEDIR."
rm "$CACHEDIR"
else
echo "Abnormality found at $CACHEDIR. Trying to remove." >&2
rm -rf "$CACHEDIR"
exit 2 # mark this as a bad attempt to fix things; it isn't clear if the fix worked
fi
fi
# exit, indicating that the script ran successfully,
# and that the Cache folder is (almost certainly) now in a good state
exit 0