Edit:
Tampaknya bekerja di dalam bash
. Tampaknya masalah ini berkaitan dengan zsh
. Jika ada situs yang lebih baik untuk mengirim masalah ini, beri tahu saya.
Saya sedang menulis skrip sederhana yang menciptakan serangkaian direktori. Saya ingin pengguna memberikan konfirmasi sebelum saya melakukannya. Saya menggunakan berikut ini sebagai dasar, tetapi tampaknya tidak bisa menjalankannya dalam fungsi bash. Jika saya letakkan di luar fungsi itu berfungsi dengan baik. Berikut ini adalah contoh yang terisolasi:
baca.sh
#!/bin/bash
test() {
read -p "Here be dragons. Continue?" -n 1 -r
if [[ $REPLY =~ ^[Yy]$ ]]
then
echo "You asked for it..."
fi
}
kode dari pos SO ini .
Sourcing file dan / atau test
hasil dalam kesalahan berikut: read:1: -p: no coprocess
. Output yang sama ketika saya menempatkannya di.bashrc
Edit ::
@hennes
- Saya ingin fungsi berada dalam file konfigurasi, jadi saya bisa memanggilnya dari direktori apa pun (idealnya .bashrc atau .zshrc)
- Saya telah mengoreksi pemformatan baris komentar pertama. Masalah masih ada di
zsh
- Versi Bash adalah 3.2, tetapi Anda telah membantu saya mengetahui bahwa masalahnya ada pada zsh dan bukan bash.
zsh
bash-scripting
Nick Tomlin
sumber
sumber
#! /bin/bash
dengan ruang di belakang dia shebang? Saya pikir itu tidak diizinkan? 3) '#! / Usr / bin / env bash' mungkin lebih baik. 4) Versi bash mana? (Saya diuji dengan bash 4.1.10 di FreeBSD dan tidak mendapatkan kesalahan)zsh
tetapi tidak berpikir bahwa akan ada konflik dengan skrip bash (saya punya beberapa skrip serupa yang berjalan dengan baik). Saya telah mengulanginya, dan menjawab pertanyaan Anda. Terima kasih telah mengarahkan saya ke arah yang benar!./read.sh
. Anda tidak perlu menjalankannya dengan cara lain atau jika Anda memasukkannya ke skrip startup. Dan jika Anda ingin menjalankannya di zsh dengan `zsh ./read.sh 'maka baris yang dimulai dengan # diabaikan. Mereka juga bingung karena mereka memberi kesan bahwa Anda menggunakan bash ketika Anda menggunakan zsh).Jawaban:
The
–p
pilihan tidak berarti hal yang sama untukbash
'sread
built-in command danzsh
' sread
built-in perintah. Dalamzsh
'sread
perintah,–p
berarti - menebak - ‘Input dibaca dari coprocess itu.’ Saya menyarankan agar Anda menampilkan prompt Anda denganecho
atauprintf
.Anda mungkin juga perlu mengganti
–n 1
dengan–k
atau–k 1
.The
zsh
setara denganbash
'sread -p prompt
isApa pun setelah
?
dalam argumen pertama digunakan sebagai string prompt.Dan tentu saja Anda dapat menentukan nama variabel untuk dibaca (dan ini mungkin gaya yang lebih baik):
(Mengutip variabel shell umumnya adalah ide yang bagus juga.)
sumber
Kode ini tampaknya melakukan apa yang Anda inginkan di zsh.
(Perhatikan bahwa pertanyaan yang Anda rujuk secara eksplisit menyebutkan itu untuk bash).
Tiga komentar:
sumber
REPLY=""
untuk menghapus variabel REPLY. Kalau tidak, jika Anda menggemakan $ REPLY, Anda akan melihatnya masih diatur sampai Anda membuka atau menutup terminal Anda atau mengaturnya lagi.Versi ini memungkinkan Anda memiliki lebih dari satu kasing
y
atauY
,n
atauN
Opsional: Ulangi pertanyaan sampai pertanyaan yang disetujui diberikan
Secara opsional: Abaikan jawaban lain
Opsional: Keluar dari terminal jika Anda mau
Perhatikan ini juga: Pada baris terakhir dari fungsi ini, hapus variabel REPLY. Kalau tidak, jika Anda
echo $REPLY
akan melihatnya masih diatur sampai Anda membuka atau menutup terminal Anda atau mengaturnya lagi.sumber