انجمنهای فارسی اوبونتو
کمک و پشتیبانی => انجمن عمومی => نویسنده: رسول سعیدنژاد در 20 فروردین 1394، 06:40 بظ
-
سلام دوستان.
من میخوام یه متن رو بدم به ترمینال تا نشونش بده، ولی؟ بیفته وسط ترمینال (حالا چه توی کنسول باشه چه yakuake و حتی ttyها)
کلی سرچ کردم. رسیدم به این تاپیک
http://www.linuxquestions.org/questions/linux-newbie-8/bash-script-center-text-on-screen-4175417274/ (http://www.linuxquestions.org/questions/linux-newbie-8/bash-script-center-text-on-screen-4175417274/)
که کد خلاصه ش بر طبق نیاز من اینجوری میشه:
#!/bin/bash
ast="****************************************************"
columnas=$(tput cols)
y=$((($columnas-${#ast})/2))
x=0
tput clear
tput cup $x $y
echo "${ast}"
موضوع اینه که خروجی این دستور خیلی ناجوره:
*********************************************************
kubuntu@Rasubuntu:~$
یعنی بالای این ستاره ها کلی فضا اشغال میشه که حدس زدم مال این تیکه هاش باشه:
columnas=$(tput cols)
tput clear
tput cup $x $y
وقتی دستکاریشون می کنم خروجی بهم میخوره.
چجوری میشه کاری کرد که اون همه (20 خط) خالی ایجاد نشه؟
یه راه دیگه هم بود به این شکل:
printf "%*s\n" 75 "*************************************"
که میتونه اینارو وسط Yakuake بندازه. ولی مثلا توی کنسول یا ttyها اثرش تموم میشه. چون هر کدوم عرض خاصی دارن.
راهی هست برای اینکه من بتونم اون بالایی رو درست کنم؟ یا اینه یه دستور باشه که من بتونم خروجی متنم رو دقیقا وسط بندازم؟ (توی هر ترمینالی که بخوام و محدودیت نداشته باشه)
مرسی ;)
-
من خیلی با بش آشنا نیستم ولی این اسکریپت رو نوشتم:
#!/bin/bash
# Filename: center
tcol=`tput cols` # Terminal Columns
slen=${#1} # Length of Input
spaces=$((($tcol - $slen) / 2)) # Number of spaces we need
for ((i = 0; i < $spaces; i++)); do
printf ' '
done
echo $1
بعد از قابل اجرا کردنش:
chmod +x center
میشه راحت باش متن رو وسطچین کرد:
./center 'Hello World'
امیدوارم مفید باشه.
-
مرسی محمد جان.
نیازم رو برطرف کرد ;)
فقط با کاراکتر * مشکل داره. یعنی * رو به عنوان یه کامند در نظر میگیره تا متن معمولی ;) ولی مثلا با = مشکلی نداره. برای حل کردنش هم یا باید از = استفاده کنم یا اینکه اینجوریش (\*\) کنم ;)