GNU/Linux >> Belajar Linux >  >> Linux

Bisakah Anda Menempatkan Beberapa Script yang Dapat Dieksekusi Dalam Satu Direktori, Dan Dengan Sumber Direktori Itu Membuat Semua Perintah Itu Tersedia?

Saya ingin meletakkan banyak skrip yang dapat dieksekusi di direktori .command (yang juga dapat dieksekusi), dan kemudian hanya perlu mencari direktori itu di .bash_profile saya. Apakah ini mungkin? Saya bisa membuatnya bekerja dengan satu file. Tetapi saat menambahkan file kedua, perintah file kedua tidak tersedia di shell.

.bashprofile saya

source ~/.commands/*

folder .commands saya

-rwxr-xr-x   1 christopherreece  staff   108 Dec 14 08:55 server_utils.sh
-rwxr-xr-x   1 christopherreece  staff    23 Dec 14 09:04 short

isi pendek

echo 'a short program'

kontes server_utils.sh

function upfile {
  scp $1 [email protected]:~/
}

Masukan dan keluaran shell.

$ hello
hello

$ short
-bash: short: command not found

Jawaban yang Diterima:

Anda tidak dapat melakukannya dengan satu source . Argumen pertama diambil sebagai nama file, yang lain muncul sebagai parameter posisi $1 , $2 … dalam skrip sumber.

$ cat test.src 
echo hello $1
$ source test.src there
hello there

Tapi Anda bisa melakukannya dengan satu putaran:

for f in ~/commands/*.src; do
    source "$f"
done

(Selain itu, memiliki hal-hal seperti itu hanya menyertakan file dengan ekstensi tertentu cukup berguna jika Anda menggunakan editor yang meninggalkan file cadangan dengan ~ tambahan . Salinan cadangan tidak menjadi aktif secara tidak sengaja.)

Meskipun demikian, perhatikan bahwa jika Anda memiliki skrip sumber yang berisi perintah biasa (seperti echo . itu) di atas atau short ), mereka akan dieksekusi ketika skrip adalah source d. Mereka tidak menghasilkan fungsi apa pun di shell sumber.

$ cat test2.src 
echo "shows when sourced"
func() {
    echo "shows when function used"
} 
$ source test2.src 
shows when sourced
$ func
shows when function used

Jika Anda ingin memiliki skrip yang dapat dieksekusi, jenis skrip yang dijalankan saat Anda memberikan namanya sebagai perintah, letakkan di suatu tempat di PATH (Saya sarankan menggunakan ~/bin untuk itu), beri mereka izin eksekusi dan letakkan hashbang yang tepat di awal skrip (#!/bin/sh atau #!/bin/bash atau apa pun)


Linux
  1. Perintah Linux untuk mencantumkan semua perintah dan alias yang tersedia

  2. Bagaimana Anda menemukan pengguna asli melalui beberapa perintah sudo dan su?

  3. Haruskah saya meletakkan garis miring setelah sumber dan tujuan saat menyalin folder

  1. Bagaimana cara membuat bazel menggunakan penyimpanan eksternal saat membangun?

  2. Bagaimana saya bisa melakukan Ctrl-Z dan bg dalam satu penekanan tombol untuk membuat proses berlanjut di latar belakang?

  3. perintah bash yang tidak muat di satu halaman - membuat keluaran dapat digulir

  1. 9 direktori Linux yang harus Anda buat cadangannya dan yang tidak boleh

  2. Saat Anda Mengetik "ls -a", Apa Arti "." Dan ".."?

  3. Apakah ada file yang selalu ada dan pengguna 'normal' tidak dapat mengaktifkannya?