Temukan file di jalur tanpa "yang"?

12

Saya (entah bagaimana) dapat menjalankan skrip:

$ assemble.sh file
... [output]

Tetapi whichtidak dapat menemukannya:

$ which assemble.sh
which: no assemble.sh in (/s/std/bin:/usr/afsws/bin:/opt/SUNWspro/bin:/usr/ccs/bin:/usr/ucb:/bin:/usr/bin:/usr/stat/bin:/usr/X11R6/bin:.
  1. Bagaimana ini mungkin?
  2. Bagaimana saya dapat menemukan di mana file ini?

Saya menggunakan bash.

Xodarap
sumber
Apakah assemble.shdi direktori Anda saat ini?
Keith
3
Mungkin pertanyaan bodoh, tetapi apakah itu alias (yaitu assemble.sh muncul ketika Anda mengetik perintah alias ?
James McLeod
@JamesMcLeod Tebakan hebat! Itu adalah kasus saya untuk acme.sh ( github.com/Neilpang/acme.sh ). Setelah menginstal, alias acme.sh telah dibuat dan saya bertanya-tanya bagaimana acme.sh dipanggil meskipun tidak berada di PATH var.
rlib

Jawaban:

17

Gunakan perintah ini: type assemble.sh

Ini bekerja di berbagai kerang dan hanya menunjukkan hasil pertama.

glenn jackman
sumber
9
Atau hanya type assemble.sh, yang portabel (dan hanya menampilkan pertandingan pertama sedangkan type -aksh / bash membangun untuk menampilkan semua pertandingan).
Gilles 'SANGAT berhenti menjadi jahat'
6

Atau pisahkan lintasan, dan gunakan di find - kecocokan pertama harus menjadi solusinya

find ${PATH//:/ } -maxdepth 1 -name assemble.sh -print -quit

type tentu saja lebih mudah.

Pengguna tidak diketahui
sumber
2
Ini cukup berguna. Saya tidak tahu saya bisa membagi $ PATH ke dalam sub komponennya dan mencari masing-masing denganfind
Ehtesh Choudhury
1
Tidak mencoba tetapi saya kira ini bisa pecah dengan ruang di komponen PATH
nhed
4

Anda mungkin menggunakan bash, tetapi sintaks dari whichoutput menunjukkan bahwa Anda menggunakan bash yang whichditulis dalam csh. PATH muncul dikutip oleh tanda kurung, dan direktori di PATH memiliki entri suka /opt/SUNWspro/bindan /usr/ccs/binyang hanya masuk akal di Solaris. Itu konsisten: Solaris menggunakan cshwhich .

Inilah tebakan saya: Anda punya satu PATH untuk bash, dan satu lagi untuk csh. Ini mungkin masalah sistem. Seingat saya, Solaris menyimpan / etc / profile dan / etc / cshrc file untuk pengaturan PATH seluruh sistem. Dua file inisialisasi tersebut dapat mengatur variabel PATH yang berbeda untuk shell yang berbeda. Lakukan "echo $ PATH" di bawah bash, dan lihat apakah itu setuju dengan apa yang whichdicetak perintah sebagai string PATH.

Bruce Ediger
sumber
4
command -v assemble.sh

Info

-v cetak deskripsi COMMAND yang mirip dengan `type 'builtin
Steven Penny
sumber
Juga akan berguna jika Anda ingin menemukan dalam versi modifikasi PATHASSEMBLE=$(PATH=/usr/bin:/usr/local/opt/coreutils/libexec/gnubin command -v assemble.sh)
nhed
0

Anda dapat menggunakan locate assemble.shuntuk menemukan lokasi file.

nico
sumber
Tidak, ini menunjukkan lokasi semua file (dunia-) yang dapat dibaca yang namanya mengandung assemble.sh, yang tidak relevan di sini.
Gilles 'SANGAT berhenti menjadi jahat'
Itu sama sekali tidak relevan. Bahkan jika dia memiliki banyak file yang disebut seperti itu locatejuga akan memberinya lokasi yang dia inginkan. assemble.shbukan nama file yang umum, jadi ia kemungkinan akan menemukan file dengan mudah (yang diminta OP).
nico
1
Bukankah Anda harus updatedbsebelum locatemenunjukkan hasil?
glenn jackman
1
Biasanya updatedbdijalankan setiap hari sebagai tugas cron, tapi ya, Anda mungkin harus memaksanya jika file tersebut sangat baru.
nico