Bagaimana menjalankan skrip tanpa mengetik path lengkap?

57

Saya ingin tahu apakah ada cara untuk menjalankan skrip program / shell tanpa mengetik path lengkap:

/opt/idea/bin/idea.sh
Poorman_Patrick
sumber
Anda selalu dapat memberikan path lengkap file.
muru
Terima kasih @uru, ini saya tahu, tetapi ini adalah program yang sering saya gunakan, jadi saya ingin dapat menjalankannya dengan perintah sederhana, bukan path file yang panjang.
Jonny
nufailm.blogspot.com/2012/05/... ini akan membantu untuk ide :)
dedunumax

Jawaban:

60

Anda bisa membuat symlink . Buat di /usr/local/bin. Yang Anda butuhkan adalah menjalankan perintah:

sudo ln -s /full/path/to/your/file /usr/local/bin/name_of_new_command

Setelah itu Anda harus membuat fileeksekusi Anda :

chmod +x /full/path/to/your/file

Sekarang Anda dapat menjalankannya name_of_new_commandkapan saja di terminal Anda.

Perhatikan bahwa ini adalah solusi yang baik hanya untuk penggunaan Linux di rumah.

c0rp
sumber
11
Perhatikan bahwa Anda tidak boleh menempatkan symlink di /usr/local/binyang menunjuk ke skrip di folder rumah pribadi, seperti /home/jack/myscript.sh, karena hanya pengguna yang jackbiasanya dapat menjalankannya. Symlink akan terlihat untuk pengguna lain, tetapi bukan file yang ditunjuknya. Pada sistem pengguna tunggal ini mungkin tidak masalah, tapi tetap saja, "praktik yang baik" untuk menempatkan skrip (atau tautan ke skrip) yang dapat dibaca semua pengguna /usr/local/bin, dan skrip pribadi yang dibuat sendiri (atau tautan ke skrip) dari satu pengguna di ~/binfolder mereka .
Malte Skoruppa
tambahkan symlink di / usr / sbin / membuatnya dapat diakses dari mana saja
Seyfi
28

Anda dapat menambahkan /opt/idea/binke PATHvariabel Anda :

PATH=/opt/idea/bin:"$PATH"

Setelah ini, Anda dapat menjalankannya dengan sederhana idea.sh.

Anda mungkin ingin menambahkan baris ini di ~/.bashrcfile Anda .

janos
sumber
2
juga: jika Anda membuat skrip dapat dieksekusi, ekstensi .sh dapat ditinggalkan (dengan asumsi Anda menggunakan shebang di bagian atas skrip). cukup "ide" saja sudah cukup.
Jacob Vlijm
1
@ Jacob: Anda tidak dapat meninggalkan ekstensi, karena itu adalah bagian dari nama file yang dapat dieksekusi (ini bukan Windows, di mana keajaiban seperti itu menyebabkan masalah lain). Untuk memanggil skrip dengan nama idea, Anda harus membuat tautan atau alias dengan nama yang menunjuk idea.shskrip.
Jonathan Callen
2
@ Jonathan Callallen, Anda pasti bisa! membuat skrip dapat dieksekusi, hapus ekstensi .sh dari kedua nama file dan perintah untuk menjalankannya, mengingat fakta bahwa Anda memulai skrip dengan shebang #! / bin / bash.
Jacob Vlijm
1
@ Jacob apa yang saya maksud adalah tanpa mengganti nama file , Anda tidak bisa (dan tampaknya ini adalah bagian dari paket perangkat lunak yang lebih besar, jadi Anda tidak boleh hanya mengganti nama file)
Jonathan Callen
2
Terima kasih @ Jacob, perhatikan ia mengatakan "Ketika skrip diinstal ke direktori di sistem PATH" . The idea.shScript tidak naskah tersebut, pada kenyataannya bergerak di luar dir instalasi benar-benar tidak didukung. Aturan pengemasan Debian tidak berlaku di sini.
janos
15

Anda dapat membuat fungsi di ~/.bashrc:

some-name () {
    /path/to/your/file
    # or:
    #cd /path/to/your
    #./path
}

Atau Anda dapat membuat alias:

alias some-name='/path/to/your/file'
# or  
#alias some-name='cd /path/to/your/; ./file'

Dalam kedua kasus, Anda dapat menjalankannya dengan menelepon:

$ some-name

Jika file tidak bergantung pada tempat file itu berjalan, pertimbangkan untuk menambahkannya ke ~/bin:

mkdir -p ~/bin
cp /path/to/you/file ~/bin
# or mv /path/to/you/file ~/bin
# or ln -s /path/to/you/file ~/bin

~/bin, jika ada, ditambahkan ke Anda $PATHsecara otomatis. Maka Anda langsung menelepon file:

$ file

(Namun pilihan nama yang buruk, pertimbangkan untuk menyebutnya sesuatu yang kurang generik.)

muru
sumber
@Oli selalu memberi saya lima menit, saya cenderung menambahkan indentasi. :) Itu hanya menjengkelkan karena saya perlu menipu editor untuk menggunakan Ctrl-K untuk indentasi tingkat kedua.
muru
2
+1 secara khusus untuk solusi menambahkan fileke Anda ~/bin, yang biasanya saya lakukan (untuk skrip yang lebih panjang). Saya mungkin bahkan akan menempatkan yang di atas :) Alias ​​baik untuk cara pintas ke perintah dengan parameter tertentu, misalnya alias l='ls -CF',. Meskipun saya telah melihat penggunaan alias yang jauh lebih luar biasa . Saya tidak cenderung mendeklarasikan fungsi dalam ~/.bashrc(saya lebih suka mengatur semua skrip saya dalam file terpisah ~/bin). Meskipun semua ini adalah masalah selera, saya kira :)
Malte Skoruppa
@Malte Skoruppa Saya baru saja memberikan preferensi pada metode yang paling mudah dipinjamkan sendiri cd, karena skrip mungkin bergantung pada direktori kerja. :) Kalau tidak, ya, saya cenderung menaruh file di ~/bindiri saya.
muru
10

Anda dapat membuat peluncur dengan menggunakan perintah berikut:

gnome-desktop-item-edit --create-new <path-where-to-save>. Saya akan membuka jendela ini.

masukkan deskripsi gambar di sini

Beri nama apa pun yang Anda suka dan dalam tipe kotak perintah berikut

sh -c '/opt/idea/bin/idea.sh' dan simpan itu.

Sekarang Anda dapat menjalankan file itu menggunakan peluncur yang baru dibuat

ATAU

Anda dapat membuat file .desktop dengan konten berikut

[Desktop Entry]
Name=<whatever-you-want>
Exec=sh -c '/opt/idea/bin/idea.sh'     
Terminal=false
Type=Application
Icon='<path to an icon file if you want>'

Sekarang simpan dengan .desktopekstensi di sembarang tempat.

Jadikan itu dapat dieksekusi dengan perintah ini chmod a+x <your-desktop-file>

Sekarang klik dua kali untuk membukanya.

g_p
sumber
7

Kita dapat mendefinisikan suatu fungsi dan menambahkan hotkey dengan menggunakan bindperintah untuk memanggilnya. Buka ~/.bashrcfile dan tambahkan baris ini ke sana:

# define function that opens your program in working directory
Openprog(){
    /your-Program/path/here
}

# bind hotkey to it (<F12>)
bind -x '"\e[24~":"Openprog"'

Sekarang ketika Anda menekan F12, program Anda akan diluncurkan.

Catatan: Cara cepat untuk menentukan kode melarikan diri:

Buka terminal Anda dan tekan Ctrl+ V. Sekarang tekan pintasan keyboard favorit Anda. Kode melarikan diri yang benar akan muncul. Pastikan untuk mengganti ^[dengan \esebelum menambahkan pintasan, misalnya ganti ^[[24~dengan \e[24~.

αғsнιη
sumber
7

Kami juga dapat menjalankan /opt/idea/bin/idea.shfile secara langsung menggunakanbash_aliases

Buka ~/.bashrcfile dengan menjalankan,

gedit ~/.bashrc

Hapus #sebelum garis dan simpan, sehingga garis akan terlihat seperti,

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

Sekarang buka ~/.bash_aliasesfile,

gedit ~/.bash_aliases

Tambahkan baris di bawah ini dalam file itu dan simpan,

alias idea='cd /opt/idea/bin && sudo ./idea.sh'

Akhirnya sumber ~/.bashrcfile,

source ~/.bashrc

Sekarang Anda dapat menjalankan /opt/idea/bin/idea.shfile secara langsung dengan,

idea
Avinash Raj
sumber
5

Selain jawaban baik lainnya, pertimbangkan untuk menghubungkan ~/.local/bindan menambahkan direktori ini ke PATH Anda (dari dalam Anda .bashrcmisalnya). Metode ini tidak memerlukan izin khusus (tidak seperti symlinking /usr/local/bin, misalnya). Dengan cara ini, Anda mungkin memiliki struksi direktori standar tanpa membanjiri $ HOME Anda. Baca lebih lanjut tentang ini di https://unix.stackexchange.com/ pertanyaan ini:

abstrus
sumber
1

Buat tautan lunak di /usr/bindirecotyr:

ln -s /usr/bin/idea.sh  /opt/idea/bin/idea.sh

Sekarang jalankan dengan menggunakan:

idea.sh
J.Franks
sumber
0

Atau Anda cukup menggunakan

nano ~/.bashrc

dan tambahkan

PATH=/full/path/to/file:"$PATH"

di ujungnya, lalu simpan dan keluar. Setelah itu, Anda cukup mengetik nama file.

Bantu Pemula
sumber
0

Saya mengikuti semua jawaban di sini dan di tempat lain dan sangat sedikit yang gagal menyebutkan bahwa Anda mungkin perlu LOG OUT agar perintah akhirnya dapat berfungsi.

Sekadar rekap, terutama untuk Xubuntu , tetapi untuk varian Debian / Ubuntu lainnya saya juga menulis instruksi sederhana ini.

(dalam instruksi berikut ini kami menggunakan direktori ~ / bin , karena itu secara otomatis tempat dari mana OS ini mencari perintah. Lihat di sini :

Petunjuk bodoh untuk membuat perintah Anda berfungsi:

# Open Terminal with Ctrl + Alt + T (or your system's own shortcut)

# You'll work in your home folder, no need to use sudo for any of this

cd # Go to home directory

mkdir -p bin # Create folder ~/bin if it doesn't exist

# Be careful not to type /bin, that's the bin folder in system root: /

sudo apt install nano # Skip this if you have Nano installed

nano bin/yournewcommand

    # In Nano, type:

    printf "Your new command works! \n" # \n means line break

    # Ctrl+X To leave Nano

    # Ctrl+Y To save the unsaved file

    # Enter to confirm

chmod +x bin/yournewcommand

yournewcommand # If you just created the bin folder, this command might not yet work.

# You must now log out and log back in to make the bin folder noticed (I think)

yournewcommand # Now it works! (You can use Tab to autocomplete the command you're typing)

# If you add a second file/command, it should work without logging out (at least in my tests)
Manu Järvinen
sumber