انجمنهای فارسی اوبونتو
جامعه کاربران => کافه اوبونتو => نویسنده: ɴɪᴍᴀ در 30 خرداد 1401، 05:36 بظ
-
سلام
من میخوام رو یه ماشین مجازیم که بهش ssh میکنم هر وقت یه ترمینال باز شد یا ssh شد (در واقع هروقت بش اجرا شد) این دستور اجرا شه و رکورد شروع شه!
وقتی که تو bashrc میزارمش هر وقت یه bash اجرا میشه یه لوپ بینهایت درست میشه که همش رکورد کردن رو شروع میکنه! که دلیل منطقی ای هم داره! چون هر بار یه bash اجرا میشه دیگه بعد از شروع رکورد! چطور میتونم این مشکل رو حل کنم؟
-
لطفا زودتر جواب بدید. ممنونم
-
ببین نیما من از ssh سر در نمیارم و اون ابزارم که گفتی دقیقا نفهمیدم چیکار میکنه ، فقط فهمیدم که میخوای وقتی وصل شدی به سیستمت ، تنها بار اول یه ابزاری اجرا شه و نه هر بار که بش اجرا میشه ، خب میتونی بگی دفعه اول یه فایل توی /tmp بسازه و هر بار ک دوباره اجرا میشه فقط بررسی کنه اگه اون فایل نبود اجرا کنه ابزارتو ، که یعنی وقتی باشه اون فایل یعنی اجرا شده دیگه ، وقتی خواستی ابزارت متوقف شه کارش ، یه الیاس داشته باش که پاک کنه اون فایلو و ابزارتم متوقف کنه : )
-
درسته :)
این ابزار از دستور هایی که میزنم فیلم میگیره و چیز باحالیه! برای همین میخوام که هم بشی که باز شد این اجرا شه تا از دستوراتی که توش اجرا میشه فیلم گرفنه شه!
-
حل میشه پس با این ترفند ؟ اگه میشه پس ( حل شد ) یادت نره : )
-
نه حل نمیشه متاسفانه!
-
میتونید توی فایل bashrc. تنظیم کنید که یه بررسی انجام بشه که یه متغییر تعریف شده یا نه.
اگه تعریف نشده بود، اون رو تعریف و export کنه. بعد هم asciinema اجرا بشه.
اگه اون متغیر تعریف شده بود، asciinema اجرا نشه.
این رو ببینید:
if [ ! -v _BASHRC_IS_SOURCED ]; then
_BASHRC_IS_SOURCED=1
export _BASHRC_IS_SOURCED
other commands
fi
مهم نیست که مقدار متغیر محیطی BASHRC_IS_SOURCED_ چی باشه. حتی میتونید به اون مقداری ندید. فقط مهمه که تعریف و export شده باشه.
export برای این لازم هست تا پوستههایی که توسط این پوسته اجرا میشن، همچنان متغیر BASHRC_IS_SOURCED_ رو ببینند.
به جای other commands هم بقیه چیزهایی که میخواهید رو بنویسید.
اگه به هر دلیلی متغیر BASHRC_IS_SOURCED_ تعریف شده باشه و bash اجرا بشه، اون چیزهایی که توی بلوک if مربوط قرار دارند اجرا نمیشن.
-
خب این با اون فایل هم میشد نه ؟
-
مهم نیست که مقدار متغیر محیطی BASHRC_IS_SOURCED_ چی باشه. حتی میتونید به اون مقداری ندید. فقط مهمه که تعریف و export شده باشه.
export برای این لازم هست تا پوستههایی که توسط این پوسته اجرا میشن، همچنان متغیر BASHRC_IS_SOURCED_ رو ببینند.
به جای other commands هم بقیه چیزهایی که میخواهید رو بنویسید.
اگه به هر دلیلی متغیر BASHRC_IS_SOURCED_ تعریف شده باشه و bash اجرا بشه، اون چیزهایی که توی بلوک if مربوط قرار دارند اجرا نمیشن.
ممنونم،
انجام شد، ولی این مشکل رو دارم:
asciinema needs an ASCII or UTF-8 character encoding to run. Check the output of `locale` command.
یه کاربر جدید ساختم، میخوام صبط شه ولی این ارور رو میده!
user:~$ locale
LANG=
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=POSIX
# File generated by update-locale
LANG=en_IN.UTF-8
LC_NUMERIC="az_IR"
LC_TIME="az_IR"
LC_MONETARY="az_IR"
LC_PAPER="az_IR"
LC_NAME="az_IR"
LC_ADDRESS="az_IR"
LC_TELEPHONE="az_IR"
LC_MEASUREMENT="az_IR"
LC_IDENTIFICATION="az_IR"
خب این با اون فایل هم میشد نه ؟
نه، چون وقنی یه فایل باشه دیگه هیچ کدوم از شل های دیگه ضبط نمیشن! ولی متغیر برای یه شله!
ممنونم
-
راهی نیست؟
-
خب این با اون فایل هم میشد نه ؟
با ایجاد فایل هم میشده اینکار رو کرد. دقیقا نمیدونم چیکار کردند که نشده.
ممنونم،
انجام شد، ولی این مشکل رو دارم:
asciinema needs an ASCII or UTF-8 character encoding to run. Check the output of `locale` command.
یه کاربر جدید ساختم، میخوام صبط شه ولی این ارور رو میده!
...
چه توزیعی دارید؟
-
اوبونتو تو ماشین مجازی
-
یکم عجیبه. اوبونتو سرور نصب کردید؟
بسته locales رو دوباره پیکربندی کنید. توی مراحل پیکربندی، یه encoding که utf8 باشه انتخاب کنید. مثلا en_US.UTF-8 یا fa_IR.UTF-8
با دستور dpkg-reconfigure میتونید یه بسته رو توی دبیان و توزیعهای مبتنی بر اون، دوباره پیکربندی کنید.
sudo dpkg-reconfigure locales
-
این کار هارو کردم و درست نشد
نه اوبونتو دسکتاپ
-
اینم bashrc:
هنوز قطعی نیستا! ;D
set +h
umask 022
LFS=/mnt/lfs
LC_ALL=POSIX
LFS_TGT=$(uname -m)-lfs-linux-gnu
PATH=/usr/bin
if [ ! -L /bin ]; then PATH=/bin:$PATH; fi
PATH=$LFS/tools/bin:$PATH
CONFIG_SITE=$LFS/usr/share/config.site
export LFS LC_ALL LFS_TGT PATH CONFIG_SITE
-
چرا LC_ALL رو توی فایل bashrc. تنظیم کردید؟ مشکل از همینه.
-
ممنونم! حل شد با این روش!
-
البته حواستون باشه ممکنه برای کامپایل یا اینجور کارها، برابر نبودن LC_ALL با POSIX مشکل درست کنه. مخصوصا وقتی کامپایلهای سنگین و زیاد قراره انجام بشه.
انگار برای بعضی مقادیر *_LC بعضی چیزها به یه شکل دیگه عمل میکنند و به همین خاطر معمولا موقع کامپایل، *_LC رو به POSIX تغییر میدن. درست مطمئن نیستم.
از بقیه bashrc. که قرار دادید به نظر میاد دارید سعی میکنید linux from scratch رو نصب کنید. درسته؟ اگه اینجوره، حواستون به شرایط بالایی باشه.
-
بله درسته، چشم
کاری میتونم بکنم که هر دو کار بکنه؟
-
الان خروجی locale چی هست؟ فکر نکنم en_US.UTF-8 مشکل ساز باشه.
-
الان خروجی locale چی هست؟ فکر نکنم en_US.UTF-8 مشکل ساز باشه.
:|
LANG=
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=
-
بعد از اینکه فایل bashrc. رو تغییر دادید، یه بار از کاربر خارج و دوباره بهش وارد بشید. اگه نشد یه راهاندازی مجدد هم بکنید، ولی فکر نکنم این راهاندازی مجدد اثر داشته باشه.
-
حل نشد!
sh-5.1$ locale
LANG=
LANGUAGE=
LC_CTYPE=C.UTF-8
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=
-
یه مشکل دیگه ای که دارم هم اینه که باید sh یه لینک باشه به bash ولی هر کاری میکنم باز خود sh اجرا میشه!
-
حل نشد!
sh-5.1$ locale
LANG=
LANGUAGE=
LC_CTYPE=C.UTF-8
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=
توی فایل profile. توی هوم خودتون چیزی اضافه نکردید؟
توی فایل bash.bashrc توی /etc/ چی؟
یه مشکل دیگه ای که دارم هم اینه که باید sh یه لینک باشه به bash ولی هر کاری میکنم باز خود sh اجرا میشه!
sh توی اوبونتو یه لینک به dash هست.
sh توی سیستم alternatives مربوط به dpkg تعریف نشده به خاطر همین نمیشه راحت با دستور update-alternatives اون رو تغییر داد.
دستی اون رو به bash لینک کنید.
بهتره اینکارها رو روی جایی انجام بدید که اگه خراب شد، کار اصلی خودتون به مشکل نخوره. اگه پشتیبان هم بگیرید بهتره.