首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法将原始数据发送到命令(bash)

无法将原始数据发送到命令(bash)
EN

Stack Overflow用户
提问于 2019-07-10 23:17:03
回答 1查看 219关注 0票数 0

我想在bash脚本中存储一个.ogg文件,然后在脚本中播放它。我试过:

  • 将.ogg归档到.7z文件中(节省一些空间),将.7z存档编码为base64,将base64存储到脚本中,并解码->解压缩->播放原始.ogg流。
  • 将.ogg编码为base64,将该base64存储到我的脚本中,并解码->播放原始ogg流。
  • 创建.ogg文件的十六进制转储,将该十六进制存储到我的脚本中,使用sed将\x置于十六进制的每两个字符之前,使用printf打印十六进制并将其放入ogg123 ( ogg player)中。
  • 将.ogg归档到.7z文件中(节省一些空间),创建.7z文件的十六进制转储,将该十六进制存储到脚本中,使用sed将\x置于十六进制的每两个字符之前,使用printf打印十六进制,将输出导入7za e -si,并将输出放入ogg123 ( ogg player)。

这些都不管用。我所经历的最成功的方法是:

代码语言:javascript
复制
ogg123 <<< cat sound.ogg

但是,我确实希望不将文件写入磁盘(希望将所有文件保存在我的脚本中),如果可能的话,不要使用变量来存储任何原始数据。

另一个问题是,ogg123不支持从stdin读取数据,因此我无法将任何原始的ogg数据输送到其中。

我尝试过的命令:(当然,十六进制和base64被截断了)

代码语言:javascript
复制
$ ogg123 <<< printf 'xae\x0f\x00\xad\x83' # .ogg data
/usr/local/bin/ogg123: Argument list too long

$ ogg123 <(printf 'xae\x0f\x00\xad\x83') # .ogg data
Error opening /dev/fd/63 using the oggvorbis module.  The file may be corrupted.

$ S=<<SOUND
dGhpcyBiYXNlNjQgd291bGQgYmUgdGhlIGJhc2U2NCBvZiBteSBvZ2cgZmlsZQ==
SOUND
$ ogg123 <(echo $S | openssl base64 -d)
Error opening /dev/fd/63 using the oggvorbis module.  The file may be corrupted.
$ ogg123 <<< echo $S | openssl base64 -d
5?w?k譸?

我确实尝试过其他几个命令,但是我意外地退出了终端,这两个命令是保存在我的.bash_history中的唯一命令。不过,相信我,我所做的一切都无济于事(我已经在这上面花了3.5个小时,但没有成功)。

使用macOS High塞拉利昂10.13.6,bash 3.2.57(1)-release,ogg123 from vorbis-tools 1.4.0,7za 16.02 (x64),openssl base64 (LibreSSL 2.2.7)。

EN

回答 1

Stack Overflow用户

发布于 2019-07-11 20:48:41

不是一个完整的修复程序,但我确实让它使用了以下方法:

代码语言:javascript
复制
mplayer <(openssl base64 -d <<SND
dGhpcyBiYXNlNjQgd291bGQgYmUgdGhlIGJhc2U2NCBvZiBteSBvZ2cgZmlsZQ==
SND
)

支持mplayer读取这样的原始数据(也可以从stdin!)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56979748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档