Jalankan skrip dari mana saja

8

Saya punya skrip:

#!/bin/bash
echo "$(dirname $(readlink -e $1))/$(basename $1)"

yang ada di sini: /home/myuser/bin/abspath.shyang telah menjalankan izin.

Jika saya menjalankan echo $PATHsaya mendapatkan yang berikut:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/myuser/bin

Saya ingin dapat, dari direktori mana pun, menelepon abspath <some_path_here>dan itu memanggil skrip saya. Saya menggunakan bash, apa yang saya lakukan salah?

Cheetah
sumber

Jawaban:

30

Anda ingin mengetik abspath, tetapi programnya dinamai abspath.sh. Masalahnya bukan tentang apakah itu di PATH, tetapi fakta bahwa Anda tidak menggunakan namanya untuk memanggilnya.

Anda memiliki dua opsi:

  1. Ketik abspath.shsebagai gantinya.
  2. Ubah nama program menjadi abspath.
Michael Hampton
sumber
1
... Atau membuat simlink a: cd $HOME/bin ; ln -s abspath.sh abspath. Ini memungkinkan Anda menyimpan ekstensi yang benar untuk skrip dan memiliki alat bernama yang Anda suka. (Anda bisa menggunakan futur, ganti skrip shell Anda dengan skrip python, misalnya ...)
F. Hauri
Atau buat alias.
Jenny D
6

Kode ini cukup kecil sehingga saya akan mengkodekannya sebagai fungsi shell:

abspath() {
    echo "$(dirname "$(readlink -e "$1")")/$(basename "$1")" 
} 

Dan ya Anda memang ingin semua kutipan itu.

glenn jackman
sumber
4

atur alias dengan menambahkan perintah Anda di file .bashrc.

alias abspath='sh /home/myuser/bin/abspath.sh'

Dan jangan lupa untuk sumber file.

Balasekhar Nelli
sumber
1
Mengapa Anda ingin sudo di sini?
CVn
1
Saya akan memilih jika saya memiliki reputasi yang cukup karena menggunakan sudo tidak perlu sama sekali salah. Tampaknya beberapa orang secara otomatis menggunakan sudo untuk semuanya alih-alih belajar kapan dan mengapa itu diperlukan.
Scott Severance
Setuju dengan kalian. Dan saya tahu Kapan harus menggunakan sudo. Saya tidak melihat seluruh pertanyaan.
Balasekhar Nelli
2

Saya akan mengganti nama skrip bash Anda untuk abspathkemudian memindahkannya ke bindirektori. Anda akan dapat menelepon abspathdari mana saja saat itu

Harvey
sumber
0

Opsi ke-3 adalah membuat alias bernama abspath yang mengarah ke skrip abspath.sh Anda.

tokamak
sumber
5
Tidak diperlukan jika diperbaiki seperti yang dijelaskan oleh solusi yang diterima, juga cukup berbelit-belit dan sebenarnya menyembunyikan masalah daripada mengatasinya.
dawud
Tidak layak diperdebatkan, tetapi tidak perlu dikatakan bahwa jika Anda menyelesaikannya dengan satu solusi, Anda tidak perlu menerapkan solusi lain. Ya ini adalah solusi bandaid dan merujuk langsung ke skrip shell adalah perbaikan yang lebih ideal.
tokamak