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?

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.

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.


4

atur alias dengan menambahkan perintah Anda di file .bashrc.

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

Dan jangan lupa untuk sumber file.


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


0

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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.