Bir bash betiği için takma ad oluşturma


10

Bu yüzden denedim ve bir aliasin yarattım .bashrc. Ancak, komutu test ettiğimde:

[rkahil@netmon3 ~]$ menu
-bash: menu: command not found

İşte .bashrcdosyada ne var :

# Source global definitions

if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# User specific aliases and functions
alias menu='./menuScript.sh'
alias vi='vim'

Komik olan takma adı oluşturduğumda viişe yaradı. Ancak menü yapmaz. UnixStackExchange'teki önceki yayınları aradım ve diğer yayınları takip etmeye çalıştım, ancak boşuna. Başka önerisi olan var mı?


1
alias menu = 'bash ./menuScript.sh' ile denediniz mi? (Ben bir linux makinede değilim, test edemiyorum)
Con7e

Nereden 'menü' çalıştırıyorsunuz? 'MenuScript.sh' ile aynı dizin değilse, bir 'komut bulunamadı' komutundan şikayet eder. Belki de mutlak bir yol kullanmalısın?
garethTheRed

1
@garethTheRed söyleyebilirim./menuScript.sh: command not found
Michael

@MichaelMrozek - adil olanı. Az önce kontrol ettim ve dedi No such file or directoryki, hala OP'nin hatasıyla aynı değil. Nokta yine de duruyor - takma ad her zaman sadece menuScript.shbulunduğu dizinde kullanılmayacaksa mutlak bir yolla en iyisi olurdu .
garethTheRed

1
@ryekayo done :)
Con7e

Yanıtlar:


9

Denemelisin alias menu='bash ./menuScript.sh'. Şu anda bir Linux makinesinde değilim, bu yüzden kendim test edemiyorum, ama çalışmalı. Diğer adı çağırdığınızda, yolla ne yapılacağını bilmez, bu nedenle bashbaşında.

Ve terminalin sıfırlanması, değişikliği yaptıktan sonra yardımcı olur.


İlk paragrafın ne kadar önemli olduğunu anlamıyorum - çalıştırılabilir durumda olmadıkça menuScript.sh, chmodbu durumda hata mesajı "İzin reddedildi". .bashrcYanıtın dosyanın bir tekrarını zorlamanın şüpheli olduğunu düşünüyorum . ………………… PS Kabuk, kullanıcı ./menuScript.shtarafından yazılırsa - dosyayı yürütmeye çalışarak yolla ne yapacağını bilir .
Scott

7

Ne zaman yaparsın

alias menu='./menuScript.sh'

"o dosya" yazan ancak onunla ne yapacağınızı söylemeyen bir takma ad oluşturursunuz.

Ancak, eğer

alias menu='source ./menuScript.sh'

veya

alias menu='. ./menuScript.sh'

Bu dosyayı çalıştır diyorsunuz .


6

Değişiklikleri yaptıktan sonra ~ / .bashrc dosyanızı kaynaklamayı hatırladınız mı? Çünkü değişiklikler bilgisayarınızı yeniden başlattıktan veya dosyayı sağladıktan sonra .bashrc dosyanızda etkili olur.


2
Bu yazı türü, bir yorum için daha uygun gibi görünüyor.
HalosGhost

2
@HalosGhost Nasıl anlıyorsunuz? Ben de ilk aklıma gelen şey, tam olarak buna neden olur
Michael Mrozek

@MichaelMrozek, bunu sadece cevap mesajlarının kesin bir çözüm sunması gerektiği için öneriyorum, örneğin, "Kaynakınızı unuttunuz .bashrc, aşağıdakileri yapın…" Öte yandan, soruların açıklığa kavuşturulması (ör. "Şunu unuttunuz mu…?") Yorumlar için daha uygundur. Bu yazının bir cevap için çok daha uygun görünmesi çok fazla bir şey ifade etmeyecekti.
HalosGhost

Bilgisayarınızı yeniden başlatmak hile yaparken, sadece tty veya oturum (oturum açma yöneticisi kullanıyorsanız) oturumunu kapatmanız gerekir. Bir grafik ortamında oturum açtıysanız source ~/.bashrcveya veya istemiyorsanız . ~/.bashrc, başka bir kabuk da açabilirsiniz. Bu kadar basit. Yeniden başlatma gerekmez.
Dylan

0

Bunun çalışmasının nedeni vim, doğrudan bir yol olmadan zaten çağrılabilir bir program olmasıdır. Zaten bir tane olduğu için açıkça "Bunun bir program olarak yürütülmesini istiyorum" demek zorunda değilsiniz vim. Komutu aldığında vim, dosyaya /usr/bin/viveya gerçek programın olduğu yere gidip yürütülmesi işletim sistemine sabit olarak kodlanmıştır .


Hayır, işletim sistemine sabit kodlanmış değil. İkili yürütülebilir, yürütülebilir bir komut dosyası, hatta başka bir programa bir sembolik bağlantı olabilir vimkullanılabilir denilen bir dosya var $PATH.. Giriş kaldırırsanız vimkullanıcılar için kullanılabilirliğini durdurur.
roaima

@roaima Demek istediğim vim çağırmak özel bir program çağırmaktan biraz farklıydı. Yine de ne elde ettiğinizi görüyorum ve katılıyorum
Nathanael Morgan

Benim içinde ifviyaşayan denilen bir senaryom var $HOME/bin(ki benim olur $PATH). Ben sadece sistem yüklü bir ikili çalıştırmak gibi aynı şekilde kullanın. Özel bir program olması gerçekten önemli değil.
roaima

0

Takma adla ilgili iki sorun var

alias menu='./menuScript.sh'
  1. Takma adı çağırdığınızda belirli bir dizinde olmanızı gerektirir. Eğer bir dizinde iseniz menuScript.shyoksa, takma yürütmek için başarısız olur.

    menuScript.shTakma adı tanımlarken komut dosyasının tam mutlak yolunu belirtmeniz daha iyi olur , örn.

    alias menu="$HOME/local/bin/menuScript.sh"

    veya benzeri.

  2. Diğerlerinin söylediği gibi, takma adın başarısız olmasının bir başka nedeni, komut dosyasının yürütülebilir olmaması veya geçersiz bir #!-line olmasıdır. Komut dosyasının aşağıdakilerle çalıştırılabilir olduğundan emin olun:

    chmod +x menuScript.sh

    ve koddaki ilk satırın

    #!/bin/bash

    veya yolunuz ne olursa olsun bash(veya komut dosyasının yazıldığı herhangi bir kabuk).

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.