.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.