انجمنهای فارسی اوبونتو
کمک و پشتیبانی => راهنماها، نکات و ترفندها => نویسنده: esmaeelE در 02 اسفند 1404، 12:34 قظ
-
در اینجا با یکسری از ترفندهای کار با پوسته bash آشنا میشویم.
جلوگیری از رونویسی پروندهها
به صورت پیشفرض در محیط bash میتوان روی فایلی که موجود است عملیات redirect یا تغییر مسیر را انجام داد.
این کار باعث میشود محتویات کنونی فایل از بین برود.
با تنظیم زیر میتوان این ویژگی را غیر فعال کرد و از این پس نمیتوان روی فایل موجود redirect انجام داد.
set -o noclobber
help set
-C If set, disallow existing regular files to be overwritten
by redirection of output.
نمونه
یک فایل نمونه با نام file.txt و محتوای زیر میسازیم.
$ echo "salam
1
2
3
dorood
a b c d
">file.txt
با فرمان cat میتوانید محتویات فایل را بررسی کنید.
حالا به سادگی میتوان با دستور زیر محتوای فایل را حذف کرد.
> file.txt
اکنون درون فایل هیچ محتوایی موجود نیست.
حالا یکبار دیگر درون فایل چیزهایی مینویسیم و اینبار ویژگی را فعال کنیم دیگر نمیتوان فایل را رونویسی کرد.
$ echo "salam
1
2
3
dorood
a b c d
">file.txt
$ set -o noclobber
$ > file.txt
bash: file.txt: cannot overwrite existing file
برای غیر فعال سازی این تنظیم
set +o noclobber
در نظر داشته باشید که این تنظیم فقط برای پوسته جاری است. اگر میخواهید این تنظیم را دائمی کنید میتوانید در فایل bashrc. قرارش دهید.
البته میتوان با فعال بودن تنظیم بالا به این شکل محدودیت را دور زد.
echo "hello" >| file.txt
-
معمولا پیشنهاد میشود به عنوان نخستین فرمان alias را اجرا کنید. تا از میانبرهای کنونی تنظیم شده آگاه شوید.
$ alias
alias als='vim ~/.bash_aliases'
alias autodir='printf "\e[?2501h"'
alias ctrlc='xclip -selection c'
alias ctrlv='xclip -selection c -o'
alias dn='aria2c -s16 -x16 -j4 -c'
alias em='emacs -nw'
alias fls='/bin/ls -1U'
alias gh='cd ~/dev/github/'
alias is_tor='curl -x socks5h://127.0.0.1:9050 -s https://check.torproject.org/api/ip | jq ".IsTor"'
alias ll='ls -ltrh'
alias ls='ls --color=auto'
alias noautodir='printf "\e[?2501l"'
alias now='date '\''+%Y_%m_%d'\'''
alias now_j='jdate '\''+%Y_%m_%d'\'''
alias upaste='nc -N paste.ubuntu-ir.org 1337'
البته خود alias را هم میتوان تغییر داد.
alias alias=ls
---
نمیتوان خروجی را روی خود فایل ذخیره کرد.
نمونه
$ echo "salam
1
2
3
dorood
a b c d
">file.txt
$ cat file.txt | grep a --color
salam
a b c d
اجرای چنین فرمانی به حذف شدن کامل محتویات فایل file.txt میانجامد.
$ cat file.txt | grep a --color >file.txt
$ cat file.txt
برای جلوگیری از این اتفاق سه راه هست.
استفاده از تنظیم ارسال پیشین
نوشتن خروجی در فایلی دیگر
استفاده از ابزار sponge
$ sudo apt install moreutils
$ cat file.txt | grep a --color | sponge file.txt
$ cat file.txt
salam
a b c d