Edytować:
Wydaje się działać wewnątrz bash
. Wygląda na to, że problem jest związany z zsh
. Jeśli jest lepsza strona do opublikowania tego problemu, daj mi znać.
Piszę prosty skrypt, który tworzy serię katalogów. Chcę, aby użytkownik dał potwierdzenie, zanim to zrobię. Używam następujących zasad jako podstawy, ale nie wydaje mi się, aby działał w funkcji bash. Jeśli umieściłem go poza funkcją, działa dobrze. Oto przykład:
read.sh
#!/bin/bash
test() {
read -p "Here be dragons. Continue?" -n 1 -r
if [[ $REPLY =~ ^[Yy]$ ]]
then
echo "You asked for it..."
fi
}
kod z to SO post.
Pozyskiwanie pliku i / lub test
powoduje następujący błąd: read:1: -p: no coprocess
. To samo wyjście, gdy umieściłem go w moim .bashrc
Edytować: :
@hennes
- Chcę, aby funkcja znajdowała się w pliku konfiguracyjnym, więc mogę go wywołać z dowolnego katalogu (najlepiej mojego .bashrc lub .zshrc)
- Poprawiłem formatowanie pierwszej skomentowanej linii. Problem nadal istnieje
zsh
- Wersja Bash to 3.2, ale pomogłeś mi się zorientować, że problem dotyczy zsh, a nie basha.
zsh
bash-scripting
Nick Tomlin
źródło
źródło
#! /bin/bash
z przestrzenią za nią shebang? Myślałem, że to nie jest dozwolone? 3) '#! / Usr / bin / env bash' jest prawdopodobnie lepszy. 4) Która wersja basha? (Testowałem z bash 4.1.10 na FreeBSD i nie miałem żadnych błędów)zsh
ale nie myślałem, że będzie konflikt ze skryptami bash (mam kilka innych podobnych skryptów działających poprawnie). Odznaczyłem go i odpowiedziałem na twoje pytania. Dzięki za wskazanie mi właściwego kierunku!./read.sh
. Nie jest potrzebny, jeśli uruchomisz go w inny sposób lub umieścisz w skrypcie startowym. A jeśli chcesz go uruchomić w zsh za pomocą `zsh ./read.sh ', linie zaczynające się od # zostaną zignorowane. Mylą się także, ponieważ sprawiają wrażenie, że używasz basha, gdy używasz zsh).Odpowiedzi:
The
–p
opcja nie oznacza tego samegobash
Sread
wbudowane polecenie izsh
Sread
wbudowane polecenie. Wzsh
Sread
dowództwo,–p
oznacza –– zgadnij –– „Dane wejściowe są odczytywane z koprocesu”. Sugeruję, abyś wyświetlał swój monit za pomocąecho
lubprintf
.Może również zajść potrzeba wymiany
–n 1
z–k
lub–k 1
.The
zsh
odpowiednikbash
jestread -p prompt
jestWszystko po
?
w pierwszym argumencie jest używany jako łańcuch zachęty.I oczywiście możesz podać nazwę zmiennej do wczytania (a może to być lepszy styl):
(Cytowanie zmiennych powłoki jest również dobrym pomysłem.)
źródło
Ten kod wydaje się robić w Zsh to, co chcesz.
(Zauważ, że pytanie, do którego odnosiłeś się wyraźnie, wspomina, że dotyczy basha).
Trzy komentarze:
źródło