V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
4641585
V2EX  ›  问与答

新手第一次写 shell 脚本遇到了一个问题

  •  
  •   4641585 · 2015-11-25 00:06:36 +08:00 · 2257 次点击
    这是一个创建于 3075 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在 OS X 下有一个命令行音乐播放器 afplay

    但是这个命令每次只能接受一个参数

    我尝试写一个脚本让它可以播放文件下所有的音乐文件

    首先想到的就是

    #!/bin/zsh
    
    for music in "$@"
    do
            afplay ${music}
    done
    

    尝试运行,出现了

    may only specify one file to play
    

    于是我意识到应该是播放结束后执行下一次循环

    但是……

    要怎么知道当前这首歌已经播放完成了呢?

    10 条回复    2015-11-25 13:15:04 +08:00
    manoon
        1
    manoon  
       2015-11-25 00:21:44 +08:00
    逻辑上来讲
    想办法去判断一首歌的时间长度,
    如果没有办法去判断,那就都设成 5 分钟

    我是打酱油的,提供一个思路,哈哈。
    kendetrics
        2
    kendetrics  
       2015-11-25 00:35:08 +08:00
    意思就是在播放中再次执行命令就会输出 may only specify one file to play ?
    你在循环里加个判断呢,如果输出匹配这个就不跳到下一首的名字去,而是继续尝试执行这一首的命令
    4641585
        3
    4641585  
    OP
       2015-11-25 00:51:11 +08:00 via iPhone
    @kendetrics
    我用
    ./mysh.sh
    来执行,
    直接就会蹦出那句提示
    MrGba2z
        4
    MrGba2z  
       2015-11-25 00:53:35 +08:00   ❤️ 1
    for SONG in *.mp3 ; do afplay ${SONG} ; done
    4641585
        5
    4641585  
    OP
       2015-11-25 07:51:07 +08:00
    @kendetrics
    ➜ /Users/{user}/Downloads/floder git:(master) ✗ ./test1 *.wav
    {
    may only specify one file to play

    Audio File Play
    Version: 2.0
    Copyright 2003-2013, Apple Inc. All Rights Reserved.
    Specify -h (-help) for command options

    Usage:
    afplay [option...] audio_file

    Options: (may appear before or after arguments)
    {-v | --volume} VOLUME
    set the volume for playback of the file
    {-h | --help}
    print help
    { --leaks}
    run leaks analysis
    {-t | --time} TIME
    play for TIME seconds
    {-r | --rate} RATE
    play at playback rate
    {-q | --rQuality} QUALITY
    set the quality used for rate-scaled playback (default is 0 - low quality, 1 - high quality)
    {-d | --debug}
    debug print output
    } *n #n=$#
    4641585
        6
    4641585  
    OP
       2015-11-25 08:09:31 +08:00
    @MrGba2z

    现在比较困惑的是怎么写成一个脚本来执行
    hienchu
        7
    hienchu  
       2015-11-25 09:56:36 +08:00 via iPhone
    找个能分析 mp3 的工具,得到时间长度,问题就解决了。如果不想用工具,可以根据码率和文件大小做个大概的估计
    liberize
        8
    liberize  
       2015-11-25 12:39:36 +08:00
    我这儿 afplay 是同步的,播完才会播下一首,脚本运行没问题
    4641585
        9
    4641585  
    OP
       2015-11-25 13:12:26 +08:00
    @liberize

    能不能分享一下脚本
    liberize
        10
    liberize  
       2015-11-25 13:15:04 +08:00
    @4641585 就你的脚本,你试下 afplay 单独播一首,是不是播完才退出
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2094 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 16:15 · PVG 00:15 · LAX 09:15 · JFK 12:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.