انجمن‌های فارسی اوبونتو

کمک و پشتیبانی => انجمن عمومی => نویسنده: رسول سعیدنژاد در 20 فروردین 1394، 06:40 ب‌ظ

عنوان: (حل شد) درخواست دستوری برای وسط چین کردن یک متن در Bash
ارسال شده توسط: رسول سعیدنژاد در 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ها اثرش تموم میشه. چون هر کدوم عرض خاصی دارن.

راهی هست برای اینکه من بتونم اون بالایی رو درست کنم؟ یا اینه یه دستور باشه که من بتونم خروجی متنم رو دقیقا وسط بندازم؟ (توی هر ترمینالی که بخوام و محدودیت نداشته باشه)

مرسی  ;)
عنوان: پاسخ : درخواست دستوری برای وسط چین کردن یک متن در Bash
ارسال شده توسط: محمد فدوی در 20 فروردین 1394، 09:11 ب‌ظ
من خیلی با بش آشنا نیستم ولی این اسکریپت رو نوشتم:
#!/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'
امیدوارم مفید باشه.
عنوان: پاسخ : درخواست دستوری برای وسط چین کردن یک متن در Bash
ارسال شده توسط: رسول سعیدنژاد در 20 فروردین 1394، 09:18 ب‌ظ
مرسی محمد جان.
نیازم رو برطرف کرد  ;)
فقط با کاراکتر * مشکل داره. یعنی * رو به عنوان یه کامند در نظر میگیره تا متن معمولی  ;) ولی مثلا با = مشکلی نداره. برای حل کردنش هم یا باید از = استفاده کنم یا اینکه اینجوریش (\*\) کنم  ;)