Saya memiliki skrip berikut. Ini adalah uji kasus sederhana di mana a
nilai string apa pun dan b
seharusnya menjadi path.
#!/bin/bash
alias jo "\
echo "please enter values "\
read a \
read -e b \
echo "My values are $a and $b""
Namun setiap kali saya mencoba untuk mengeksekusi ./sample.sh saya mendapatkan kesalahan berikut:
./sample.sh: line 3: alias: jo: not found
./sample.sh: line 3: alias: echo please: not found
./sample.sh: line 3: alias: enter: not found
./sample.sh: line 3: alias: values: not found
./sample.sh: line 3: alias: read a read -e b echo My: not found
./sample.sh: line 3: alias: values: not found
./sample.sh: line 3: alias: are: not found
./sample.sh: line 3: alias: and: not found
./sample.sh: line 3: alias: : not found
dan ketika saya mencoba source sample.sh
saya mendapatkan yang berikut:
a: Undefined variable.
Tujuan saya adalah menjadikan ini sebagai alias sehingga saya dapat sumber skrip ini dan jalankan saja alias untuk menjalankan baris perintah. Bisakah seseorang melihat ini dan memberi tahu saya apa kesalahannya?
command-line
bash
scripts
alias
Jovin Miranda
sumber
sumber
Jawaban:
Anda memiliki beberapa masalah di sini
tidak seperti in
csh
, inbash
(dan cangkang mirip Bourne lainnya), alias diberi=
tanda misalnyaalias foo=bar
kutipan tidak bisa disarangkan seperti itu; dalam hal ini, Anda dapat menggunakan tanda kutip tunggal di sekitar alias dan tanda kutip ganda di dalam
backslash
\
adalah karakter kelanjutan garis : secara sintaksis, itu membuat perintah Anda menjadi satu baris (kebalikan dari yang Anda inginkan)Begitu
Pengujian: pertama-tama kita sumber file:
kemudian
Jika Anda ingin menggunakan alias di dalam skrip, ingatlah bahwa alias hanya diaktifkan secara default di shell interaktif: untuk mengaktifkannya di dalam skrip, Anda perlu menambahkan
Terlepas dari semua hal di atas, Anda harus mempertimbangkan untuk menggunakan fungsi shell daripada alias untuk hal-hal seperti ini
sumber
$a
dan$b
akan diperluas pada waktu definisi, bukan ketika alias dijalankan.Biasakan menggunakan fungsi dalam shell tipe-POSIX. Anda tidak memiliki masalah kutipan:
sumber