Membuat alias untuk skrip bash

10

Jadi saya telah mencoba bereksperimen dan membuat aliasin .bashrc. Namun, ketika saya menguji perintah saya mendapatkan:

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

Inilah yang saya miliki di .bashrcfile:

# Source global definitions

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

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

Yang lucu adalah ketika saya membuat alias vi, itu berhasil. Tapi menu tidak. Saya telah mencari posting sebelumnya di UnixStackExchange dan berusaha untuk mengikuti posting lain, tetapi tidak berhasil. Apakah ada orang lain yang punya saran?

ryekayo
sumber
1
Sudahkah Anda mencoba dengan alias menu = 'bash ./menuScript.sh'? (Saya tidak di mesin linux, tidak bisa mengujinya)
Con7e
Dari mana Anda menjalankan 'menu'? Jika itu bukan direktori yang sama dengan 'menuScript.sh' maka itu akan mengeluh tentang 'perintah tidak ditemukan'. Mungkin Anda harus menggunakan jalur absolut?
garethTheRed
1
@garethTheRed Dikatakan./menuScript.sh: command not found
Michael Mrozek
@MichaelMrozek - yang adil. Saya baru saja memeriksa dan katanya No such file or directory, yang masih tidak sama dengan kesalahan OP. Intinya masih berdiri - itu akan lebih baik dengan path absolut kecuali alias selalu hanya akan digunakan dari direktori tempat menuScript.shtinggal.
garethTheRed
1
@ryekayo selesai :)
Con7e

Jawaban:

9

Anda harus mencobanya alias menu='bash ./menuScript.sh'. Saat ini saya tidak menggunakan mesin Linux, jadi saya tidak bisa mengujinya sendiri, tetapi harus berfungsi. Ketika Anda memanggil alias, itu tidak tahu apa yang harus dilakukan dengan path, jadi Anda harus menyertakan bashdi awal.

Dan mengatur ulang terminal tidak membantu setelah melakukan perubahan.

Con7e
sumber
Saya tidak mengerti bagaimana paragraf pertama itu penting - kecuali menuScript.shbelum chmodbisa dieksekusi, dalam hal ini pesan kesalahannya adalah “Izin ditolak”. Saya menduga bahwa memaksa membaca ulang .bashrcfile adalah jawabannya. ... ... ... ... ... ... ... PS Shell tahu apa yang harus dilakukan dengan path dengan cara yang sama jika pengguna mengetik ./menuScript.sh- dengan mencoba mengeksekusi file.
Scott
7

Saat kamu melakukan

alias menu='./menuScript.sh'

Anda membuat alias alias yang mengatakan "file itu" tetapi tidak mengatakan apa yang sebenarnya harus dilakukan dengannya.

Namun, jika Anda melakukannya

alias menu='source ./menuScript.sh'

atau

alias menu='. ./menuScript.sh'

Anda mengatakan jalankan file itu.

Michael Durrant
sumber
6

Apakah Anda ingat untuk mencari file ~ / .bashrc Anda setelah melakukan perubahan? Karena perubahan berlaku di file .bashrc Anda setelah me-restart komputer Anda atau hanya sumber file.

cbora
sumber
2
Jenis posting ini muncul seolah-olah akan lebih cocok untuk komentar.
HalosGhost
2
@HalosGhost Bagaimana pendapat Anda? Ini adalah hal pertama yang saya pikirkan juga, itu akan menyebabkan hal ini
Michael Mrozek
@MichaelMrozek, saya menyarankan ini hanya karena menurut saya posting jawaban harus menawarkan solusi yang pasti, misalnya, "Anda lupa sumber Anda .bashrc, lakukan yang berikut ...". Di sisi lain, pertanyaan klarifikasi (misalnya, "Apakah Anda lupa ...?") Tampaknya lebih cocok untuk komentar. Tidak perlu banyak pengulangan kata untuk membuat posting ini tampak jauh lebih cocok untuk jawaban.
HalosGhost
Ketika me-restart komputer Anda akan melakukan triknya, Anda hanya perlu keluar dari tty atau sesi Anda (jika menggunakan manajer login). Jika Anda masuk ke lingkungan grafis, dan Anda tidak mau source ~/.bashrcatau . ~/.bashrc, maka Anda bisa membuka shell lain juga. Sesederhana itu. Tidak perlu me-reboot.
Dylan
0

Alasan mengapa ia bekerja vimadalah karena itu adalah program yang sudah dapat dipanggil tanpa jalur langsung. Anda tidak perlu secara eksplisit mengatakan "Saya ingin ini dijalankan sebagai program" karena vimsudah ada. Hard-coded ke dalam OS ketika menerima perintah vim, pergi dan jalankan file /usr/bin/viatau di mana pun program yang sebenarnya.

Nathanael Morgan
sumber
Eh, tidak, ini bukan hard-coded ke OS. Ada file bernama vimtersedia di $PATHyang dapat menjadi biner yang dapat dieksekusi, skrip yang dapat dieksekusi, atau bahkan symlink ke program lain .. Jika Anda menghapus entri untuk vimitu tidak lagi tersedia untuk pengguna.
roaima
@roaima Yang saya maksudkan adalah memanggil vim sedikit berbeda dari memanggil program kustom. Saya melihat apa yang Anda maksudkan, dan saya setuju
Nathanael Morgan
Saya memiliki skrip bernama ifviyang tinggal di saya $HOME/bin(yang kebetulan berada di saya $PATH). Saya hanya menggunakannya dengan cara yang sama persis seperti menjalankan biner yang diinstal sistem. Benar-benar tidak masalah bahwa itu adalah program khusus.
roaima
0

Ada dua masalah dengan alias

alias menu='./menuScript.sh'
  1. Ini mengharuskan Anda berada di direktori tertentu ketika Anda memanggil alias. Jika Anda berada di direktori di mana menuScript.shtidak ada, alias akan gagal dieksekusi.

    Akan lebih baik jika Anda menentukan path absolut penuh ke menuScript.shskrip ketika mendefinisikan alias, misalnya

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

    atau serupa.

  2. Seperti yang telah dikatakan orang lain, alasan lain mengapa alias gagal adalah karena skrip tidak dapat dieksekusi, atau memiliki garis-tidak valid #!. Pastikan skrip dapat dieksekusi dengan

    chmod +x menuScript.sh

    dan bahwa baris pertama dalam skrip adalah

    #!/bin/bash

    atau apa pun jalan menuju bash(atau apa pun naskah ditulis untuk) pada sistem Anda.

Kusalananda
sumber