【发布时间】:2020-09-30 04:04:45
【问题描述】:
我的脚本中有两个函数,都是“选择”菜单,其中嵌套了其他“选择”菜单。 它们都有效,但只有第一个选择,而不是第二个选择。 我显然对他们俩都做错了。 现在,我将只提供我的一个函数,因为我猜我在这两个函数上都犯了同样的错误。
问题: 第一个菜单的所有第一部分(“Stream”)都可以正常工作,但第二部分(“Download”)却不行。
为什么它不起作用?我做错了什么??
#!/bin/env bash
MAIN(){
echo "Stream Or Download?"
select S_D in 'Stream' 'Download'; do
case $S_D in
Stream)
echo "Audio Or Video?"
select A_V in 'Audio' 'Video'; do
case $A_V in
Audio)
if [[ "$DOMAIN" =~ 'youtube' ]]; then
mpv --no-video "$URL"
else
streamlink --player='mpv --no-video' "$URL" 720p|& tee /dev/null
fi
break 2 ;;
Video)
if [[ "$DOMAIN" =~ 'youtube' ]]; then
am start -a android.intent.action.VIEW -d "$(youtube-dl -f best -g "$URL")" -n is.xyz.mpv/.MPVActivity &> /dev/null
else
am start -a android.intent.action.VIEW -d "$(streamlink "$URL")" -n is.xyz.mpv/.MPVActivity &> /dev/null
fi
break 2 ;;
Download)
echo "Song? Album? Playlist?"
select S_A_P in 'Song' 'Album' 'Playlist'; do
case $S_A_P in
Song)
echo "Enter Artist:"
read ARTIST
echo "Enter Song:"
read SONG
youtube-dl --extract-audio --prefer-ffmpeg --audio-format m4a --output "$MUSIC_DIR/$ARTIST - $SONG.%(ext)s" "$URL"
mid3v2 -v -a "$ARTIST" -S "$SONG" "$MUSIC_DIR/$ARTIST - $SONG.m4a"
break 2 ;;
Album)
echo "Enter Artist:"
read ARTIST
echo "Enter Album:"
read ALBUM
youtube-dl --extract-audio --prefer-ffmpeg --audio-format m4a --output "$MUSIC_DIR/$ARTIST - $ALBUM.%(ext)s" "$URL"
mid3v2 -v -a "$ARTIST" -A "$ALBUM" "$MUSIC_DIR/$ARTIST - $ALBUM.m4a"
break 2 ;;
Playlist)
echo "Enter Artist/DJ Or Leave It Empty:"
read ARTIST
echo "Enter A Title:"
read TITLE
if [[ -z "$ARTIST" ]]; then
youtube-dl --extract-audio --prefer-ffmpeg --audio-format m4a --output "$MUSIC_DIR/$TITLE.%(ext)s" "$URL"
mid3v2 -v -A "$TITLE" "$MUSIC_DIR/$TITLE.m4a"
else
youtube-dl --extract-audio --prefer-ffmpeg --audio-format m4a --output "$MUSIC_DIR/$ARTIST - $TITLE.%(ext)s" "$URL"
mid3v2 -v -a "$ARTIST" -A "$TITLE" "$MUSIC_DIR/$ARTIST - $TITLE.m4a"
fi
break ;;
esac
done
break ;;
esac
done
break ;;
esac
done
}
【问题讨论】:
-
这里有很多额外的代码。只需要一个选择和一个嵌套选择来说明问题。这是关于
read从 std-in 读取的内容,您必须重定向一个额外的流来读取第二个选择,但我不太确定如何。我敢肯定,其中一位 bash 大师会让您直截了当。好主意,祝你好运!
标签: bash function shell select