.Bash_profile / .profile / bashrc işlevine kabukta nasıl fonksiyon eklenir?


24

Çağın zamanını günümüze dönüştüren bir işleve sahibim. İşte tanımı

date1(){
  date -d @$1
}

Yazabilmek istiyorum:

$ date1 xxxyyy

Burada xxxyyy, fonksiyonuma ilettiğim parametredir, böylece ilgili tarihi alabilirim. Ben de bunu eklemek zorunda anlıyorum .bash_profile, .profileya .bashrcda kaynak ve ardından:

$ source file

Ancak, hangi dosyaya koyacağınızdan emin değilim. Şu anda içinde .profile. Ama koşmak için source .profileher zaman yapmak zorundayım .

İdeal olarak, bilgisayar ortam değişkeni gibi başladığında kullanılabilir olmasını sağlamalıdır.


bir giriş örneği için; 1.text çıkış epochconverter.com şimdi 1514917788; 2. bash kendi başına $ tarih +% s başına stackoverflow.com/questions/1092631/…
— AnneTheAgile

Yanıtlar:


25

Kimden man bash:

Bash etkileşimli bir giriş kabuğu olarak veya --login seçeneğiyle etkileşimli olmayan bir kabuk olarak çağrıldığında, önce bu dosya varsa / etc / profile dosyasındaki komutları okur ve yürütür. Bu dosyayı okuduktan sonra, bu sırada ~ / .bash_profile, ~ / .bash_login ve ~ / .profile ifadelerini arar ve var olan ve okunabilen ilk komuttan komutları okur ve yürütür.

Başka bir deyişle, herhangi birinde koyabilirsiniz ~/.bash_profile, ~/.bash_loginya ~/.profile, veya herhangi bir dosya sourceya bu kadar d . Genellikle "oturum açma kabukları için yürütülen kişisel başlatma dosyası" olan ~/.profilekaynak olacaktır ~/.bashrc.

Etkinleştirmek için ya yeni bir kabuk başlatın, çalıştırın exec $SHELLveya çalıştırın source ~/.bashrc.


1
Eh onun 'argümanı baskı özel bir işlev oluşturmak için yolunuzu çalıştım, ama o işlev eklemek bile .bash_profileo zaman da yapmam gereken source ~/.bash_profilekısayol tarafından her Açık terminali Ctrl+Alt+T.
— Vicky Dev

@VickyDev source ~/.bash_profileHer zaman zorunda kalırsanız, bu, Bash kurulumunuzun bir şekilde standart dışı veya bozuk olduğunu gösterir ( man bashbelirtilen çıktıya göre). Bash'i çalıştırdığına emin misin? Örneğin, herhangi bir echo $BASHPIDşey yazdırıyor mu?
— l0b0

Bir fonksiyon tanımlamak #!/bin/shiçin üstüne eklemeniz gerekir .profilemi?
— Kolob Kanyonu

13

İçindeki işlevi tanımladıktan sonra .profileekleyin export -f date1. Bu, giriş kabuğunuz tarafından kullanılması için işlevi dışa aktarır.


+1 dışa aktarma için, ssh ProxyCommand'daki diğer adı ve diğer adı çağırmak zorunda kaldım ve kaynaktan sonra bile bulunmayan takma adlar hakkında bilgi topladı. İhracattan sonra bir cazibe gibi çalışır.
— Abhishek Anand,

7

Etkileşimli mermiler için kişiselleştirmeler yapılır ~/.bashrc. Giriş yaparken çalıştırmak istediğiniz şeyler ~/.profile(veya ~/.bash_profile, ancak grafiksel olarak giriş yaparken genellikle yüklenmez).

Bu işlev tanımını içine yerleştirin ~/.bashrc.

Bash yüklemez yana .bashrcbir giriş kabuğu olduğunda, bunu yapmak için zorlamak: Bir yazma ~/.bash_profileiçeren

. ~/.profile
case $- in *i*) . ~/.bashrc;; esac

yani ~/.profile, ~/.bashrceğer kabuk etkileşimli ise yük ve ayrıca yük .

.Bashrc Alternatifine ve oradaki bağlantılara bakın .


1

csh ve tcsh, bash gibi işlevleri desteklemez, ancak bunu yapabilirsiniz.

Örneğin, bazı metinleri yazdırmak için basit bir işlev

alias print_hello_world 'eval echo "hello world"'

betiğe argümanlar geçirme

repeate_after_me 'eval echo "$1"'

Bir if ifadesi gibi çok satırlı kod yapmak biraz karışık ama işte başlıyorsunuz.

alias X 'eval "if (\!:1 =~ 'yes') then \\
          echo yes \\
          else \\
          echo no \\
          endif"'

yine de değerlendirmek zorunda kalacaksınız ancak en karmaşık kısım, \!:[x]girdiyi komut satırından almak için sözdizimini yapıyor .

Bu seni halletmek için yeterli olmalı.


0

Sen ile bashrc mevcut tüm fonksiyonları yönlendirebilirsiniz harf ile .

Örneğin, isteğe bağlı olarak bir openstack komutunun bir fonksiyonunu bashrc'ye şu şekilde ekliyorum:

urc() { . stackrc; set -x; openstack server list --all $1; set +x; }
typeset -f >> ~/.bashrc

Şimdi gelecekteki oturumları için kaydedilir ve gibi kullanılabilir:

$ urc 

veya

$ urc --debug

-1

nokta 18: Eski hafızamda bir yönetici, ksh ve bash öğrenmek başka bir yönden kina iken. 1: - / etc / profile içerikleri sysWide. / etc / skel, yeni hesaplara verilen dosyayı içeriyordu. Bash'ten bu yana şimdi tüm dağıtımların ortak noktası. sonraki 2: - ~ / .profile, sistem standardı olarak, sonra ".profile" içeriyorsa ".bash_profile -> 3: - .bash_profile 4: - .bash_login 5: -. bashrc .bash_aliases olur aklımda daha doğru sıra, standart Terminal ve Shell ortamı ve normal .bash_login'i hiç bulunamadı ya da mevcut (kullanıcı başına özel) ayarlamak. .Profile $ PATH ile eğer ana ise.
Şimdi de ekleyerek buluyorum. .Bash_profile .profile hala baskın ve .bash_profile varlığına saygı göstermiyor. Başlık bilgisi ile birlikte kimse güncellenmiyor yani: bash startup Örnekler - bu dizin yapısı artık - örnekler ve / veya dosyalar ile birlikte gzip'd. Gnu-Bash’e güncelleme yapıldı.


1
Ne yapacaksın?
— Jesse_b
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.