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

جامعه کاربران => کافه اوبونتو => نویسنده: ɴɪᴍᴀ در 30 خرداد 1401، 05:36 ب‌ظ

عنوان: اجرای دستور asciinema rec هر بار که یه ترمینال اجرا شد (حل شد)
ارسال شده توسط: ɴɪᴍᴀ در 30 خرداد 1401، 05:36 ب‌ظ
سلام
من میخوام رو یه ماشین مجازیم که بهش ssh میکنم هر وقت یه ترمینال باز شد یا ssh شد (در واقع هروقت بش اجرا شد) این دستور اجرا شه و رکورد شروع شه!
وقتی که تو bashrc میزارمش هر وقت یه bash اجرا میشه یه لوپ بینهایت درست میشه که همش رکورد کردن رو شروع میکنه! که دلیل منطقی ای هم داره! چون هر بار یه bash اجرا میشه دیگه بعد از شروع رکورد! چطور میتونم این مشکل رو حل کنم؟
عنوان: پاسخ : اجرای دستور asciinema rec هر بار که یه ترمینال اجرا شد
ارسال شده توسط: ɴɪᴍᴀ در 30 خرداد 1401، 05:57 ب‌ظ
لطفا زودتر جواب بدید. ممنونم
عنوان: پاسخ : اجرای دستور asciinema rec هر بار که یه ترمینال اجرا شد
ارسال شده توسط: سودو. در 30 خرداد 1401، 07:05 ب‌ظ
ببین نیما من از ssh سر در نمیارم و اون ابزارم که گفتی دقیقا نفهمیدم چیکار میکنه ، فقط فهمیدم که میخوای وقتی وصل شدی به سیستمت ، تنها بار اول یه ابزاری اجرا شه و نه هر بار که بش اجرا میشه ، خب میتونی بگی دفعه اول یه فایل توی /tmp بسازه و هر بار ک دوباره اجرا میشه فقط بررسی کنه اگه اون فایل نبود اجرا کنه ابزارتو ، که یعنی وقتی باشه اون فایل یعنی اجرا شده دیگه ، وقتی خواستی ابزارت متوقف شه کارش ، یه الیاس داشته باش که پاک کنه اون فایلو و ابزارتم متوقف کنه : )
عنوان: پاسخ : اجرای دستور asciinema rec هر بار که یه ترمینال اجرا شد
ارسال شده توسط: ɴɪᴍᴀ در 30 خرداد 1401، 07:07 ب‌ظ
درسته :)
این ابزار از دستور هایی که میزنم فیلم میگیره و چیز باحالیه! برای همین میخوام که هم بشی که باز شد این اجرا شه تا از دستوراتی که توش اجرا میشه فیلم گرفنه شه!
عنوان: پاسخ : اجرای دستور asciinema rec هر بار که یه ترمینال اجرا شد
ارسال شده توسط: سودو. در 30 خرداد 1401، 07:08 ب‌ظ
حل میشه پس با این ترفند ؟ اگه میشه پس ( حل شد ) یادت نره : )
عنوان: پاسخ : اجرای دستور asciinema rec هر بار که یه ترمینال اجرا شد
ارسال شده توسط: ɴɪᴍᴀ در 30 خرداد 1401، 07:14 ب‌ظ
نه حل نمیشه متاسفانه!
عنوان: پاسخ : اجرای دستور asciinema rec هر بار که یه ترمینال اجرا شد
ارسال شده توسط: Dragon- در 31 خرداد 1401، 01:01 ق‌ظ
می‌تونید توی فایل 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 مربوط قرار دارند اجرا نمیشن.
عنوان: پاسخ : اجرای دستور asciinema rec هر بار که یه ترمینال اجرا شد
ارسال شده توسط: سودو. در 31 خرداد 1401، 01:21 ق‌ظ
خب این با اون فایل هم میشد نه ؟
عنوان: پاسخ : اجرای دستور asciinema rec هر بار که یه ترمینال اجرا شد
ارسال شده توسط: ɴɪᴍᴀ در 31 خرداد 1401، 10:45 ق‌ظ
مهم نیست که مقدار متغیر محیطی 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 rec هر بار که یه ترمینال اجرا شد
ارسال شده توسط: ɴɪᴍᴀ در 31 خرداد 1401، 08:09 ب‌ظ
راهی نیست؟
عنوان: پاسخ : اجرای دستور asciinema rec هر بار که یه ترمینال اجرا شد
ارسال شده توسط: Dragon- در 31 خرداد 1401، 08:14 ب‌ظ
خب این با اون فایل هم میشد نه ؟
با ایجاد فایل هم میشده اینکار رو کرد. دقیقا نمی‌دونم چیکار کردند که نشده.
ممنونم،
انجام شد، ولی این مشکل رو دارم:
asciinema needs an ASCII or UTF-8 character encoding to run. Check the output of `locale` command.یه کاربر جدید ساختم، میخوام صبط شه ولی این ارور رو میده!
...
چه توزیعی دارید؟
عنوان: پاسخ : اجرای دستور asciinema rec هر بار که یه ترمینال اجرا شد
ارسال شده توسط: ɴɪᴍᴀ در 31 خرداد 1401، 08:19 ب‌ظ
اوبونتو تو ماشین مجازی
عنوان: پاسخ : اجرای دستور asciinema rec هر بار که یه ترمینال اجرا شد
ارسال شده توسط: Dragon- در 01 تیر 1401، 01:28 ب‌ظ
یکم عجیبه. اوبونتو سرور نصب کردید؟

بسته locales رو دوباره پیکربندی کنید. توی مراحل پیکربندی، یه encoding که utf8 باشه انتخاب کنید. مثلا en_US.UTF-8 یا fa_IR.UTF-8
با دستور dpkg-reconfigure می‌تونید یه بسته رو توی دبیان و توزیع‌های مبتنی بر اون، دوباره پیکربندی کنید.
sudo dpkg-reconfigure locales
عنوان: پاسخ : اجرای دستور asciinema rec هر بار که یه ترمینال اجرا شد
ارسال شده توسط: ɴɪᴍᴀ در 01 تیر 1401، 01:58 ب‌ظ
این کار هارو کردم و درست نشد
نه اوبونتو دسکتاپ
عنوان: پاسخ : اجرای دستور asciinema rec هر بار که یه ترمینال اجرا شد
ارسال شده توسط: ɴɪᴍᴀ در 01 تیر 1401، 02:21 ب‌ظ
اینم 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
عنوان: پاسخ : اجرای دستور asciinema rec هر بار که یه ترمینال اجرا شد
ارسال شده توسط: Dragon- در 01 تیر 1401، 04:10 ب‌ظ
چرا LC_ALL رو توی فایل bashrc. تنظیم کردید؟ مشکل از همینه.
عنوان: پاسخ : اجرای دستور asciinema rec هر بار که یه ترمینال اجرا شد
ارسال شده توسط: ɴɪᴍᴀ در 01 تیر 1401، 04:43 ب‌ظ
ممنونم! حل شد با این روش!
عنوان: پاسخ : اجرای دستور asciinema rec هر بار که یه ترمینال اجرا شد (حل شد)
ارسال شده توسط: Dragon- در 01 تیر 1401، 04:55 ب‌ظ
البته حواستون باشه ممکنه برای کامپایل یا اینجور کار‌ها، برابر نبودن LC_ALL با POSIX مشکل درست کنه. مخصوصا وقتی کامپایل‌های سنگین و زیاد قراره انجام بشه.
انگار برای بعضی مقادیر *_LC بعضی چیز‌ها به یه شکل دیگه عمل می‌کنند و به همین خاطر معمولا موقع کامپایل، *_LC رو به POSIX تغییر میدن. درست مطمئن نیستم.

از بقیه bashrc. که قرار دادید به نظر میاد دارید سعی می‌کنید linux from scratch رو نصب کنید. درسته؟ اگه اینجوره، حواستون به شرایط بالایی باشه.
عنوان: پاسخ : اجرای دستور asciinema rec هر بار که یه ترمینال اجرا شد (حل شد)
ارسال شده توسط: ɴɪᴍᴀ در 01 تیر 1401، 05:08 ب‌ظ
بله درسته، چشم
کاری میتونم بکنم که هر دو کار بکنه؟
عنوان: پاسخ : اجرای دستور asciinema rec هر بار که یه ترمینال اجرا شد (حل شد)
ارسال شده توسط: Dragon- در 01 تیر 1401، 05:11 ب‌ظ
الان خروجی locale چی هست؟ فکر نکنم en_US.UTF-8 مشکل ساز باشه.
عنوان: پاسخ : اجرای دستور asciinema rec هر بار که یه ترمینال اجرا شد (حل شد)
ارسال شده توسط: ɴɪᴍᴀ در 01 تیر 1401، 05:12 ب‌ظ
الان خروجی 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=
عنوان: پاسخ : اجرای دستور asciinema rec هر بار که یه ترمینال اجرا شد (حل شد)
ارسال شده توسط: Dragon- در 01 تیر 1401، 05:24 ب‌ظ
بعد از اینکه فایل bashrc. رو تغییر دادید، یه بار از کاربر خارج و دوباره بهش وارد بشید. اگه نشد یه راه‌اندازی مجدد هم بکنید، ولی فکر نکنم این راه‌اندازی مجدد اثر داشته باشه.
عنوان: پاسخ : اجرای دستور asciinema rec هر بار که یه ترمینال اجرا شد (حل شد)
ارسال شده توسط: ɴɪᴍᴀ در 01 تیر 1401، 05:30 ب‌ظ
حل نشد!

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=
عنوان: پاسخ : اجرای دستور asciinema rec هر بار که یه ترمینال اجرا شد (حل شد)
ارسال شده توسط: ɴɪᴍᴀ در 01 تیر 1401، 06:46 ب‌ظ
یه مشکل دیگه ای که دارم هم اینه که باید sh یه لینک باشه به bash ولی هر کاری میکنم باز خود sh اجرا میشه!
عنوان: پاسخ : اجرای دستور asciinema rec هر بار که یه ترمینال اجرا شد (حل شد)
ارسال شده توسط: Dragon- در 02 تیر 1401، 04:41 ب‌ظ
حل نشد!

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 لینک کنید.

بهتره اینکار‌ها رو روی جایی انجام بدید که اگه خراب شد، کار اصلی خودتون به مشکل نخوره. اگه پشتیبان هم بگیرید بهتره.