Сценарий Bash не читает вход

Нажмите CTRL +_ и вместо того, чтобы ввести хит номера строки CTRL+V.

8
13.08.2012, 00:03
1 ответ

Существуют многочисленные проблемы с тем сценарием, но тот, который это вызывает Ваш конкретный вопрос, - то, потому что Вы читаете из канала (вывод ls).

1. Не анализировать ls

Используйте это вместо этого

for currentSong in *; do
  ...
done

Кроме многочисленных причин Вы не должны анализировать ls, проблема, которую Вы видите, - то, потому что STDIN подключен к выводу ls. Таким образом, когда Вы проблема a read, это не может читать из терминала, потому что STDIN не подключен к терминалу.


2. Использование больше кавычек

У Вас есть изрядное количество распространения кавычек вокруг, но все еще скучающий по некоторым. Главным образом только на cd.

cd "$musicPath"

также

case "$choice"


3. Не используйте обратные галочки

Используя обратные галочки в порядке иногда. Я часто использую их на командной строке как он быстрее для ввода, чем $(). Но для сценариев, это - хорошая практика для использования $() вместо этого.

seconds="$(mdls "$currentSong"|sed -n '20p'|awk '{print $3}'|cut -d. -f1)"


4. mkdir

Ваш mkdir генерирует (безопасный, но шумный) ошибка, если каталоги уже будут существовать. Добавьте a -p там, который вызовет mkdir ничего тихо не сделать, если это уже существует

mkdir -p ../Yes


Да, существует много ловушек с ударом. Не пытаясь быть резким, просто пытаясь повредить дурные привычки.
Весело проведите время :-)
16
27.01.2020, 20:10
  • 1
    Спасибо за все подсказки! Я люблю этот материал, таким образом, никакие заботы. Всегда любите изучать новые вещи (: –  Cade 12.08.2012, 07:42

Теги

Похожие вопросы