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)