[英]Can't send raw data into command (bash)
我想將.ogg文件存儲在bash腳本中,並稍后在腳本中播放。 我努力了:
將.ogg歸檔到.7z文件中(節省一些空間),將.7z歸檔文件編碼為base64,將該base64存儲到我的腳本中,然后解碼->解壓縮->播放原始.ogg流。
將.ogg編碼為base64,將該base64存儲到我的腳本中,然后解碼->播放原始ogg流。
創建.ogg文件的十六進制轉儲,將該十六進制存儲到我的腳本中,使用sed將\\x
放置在十六進制的每兩個字符之前,使用printf打印十六進制並將<<<
放入ogg123
(我的ogg播放器)
將.ogg歸檔到.7z文件中(節省一些空間),創建.7z文件的十六進制轉儲,將該十六進制存儲到我的腳本中,使用sed將\\x
放置在十六進制的每兩個字符之前,並使用printf打印十六進制,將輸出7za e -si
到7za e -si
並將<<<
7za e -si
到ogg123
(我的ogg播放器)
這些都不起作用。 我擁有的最成功的方法是:
ogg123 <<< cat sound.ogg
但是,我確實更希望沒有文件寫入磁盤(希望將其全部存儲在腳本中),並且如果可能的話,不要使用變量來存儲任何原始數據。
另一個問題是, ogg123
不支持從stdin讀取,因此我無法將任何原始的ogg數據傳送到其中。
我嘗試過的命令:(十六進制和base64當然被截斷了)
$ 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譸?
我確實嘗試了其他幾個命令,但是我不小心退出了Terminal,而這兩個命令是保存在我的.bash_history中的唯一命令。 但是請相信我,但是,我嘗試的所有事情都無濟於事(我已經花了3.5個小時在此上一直沒有成功)。
使用macOS High Sierra 10.13.6,bash 3.2.57(1)-發行版,vorbis-tools 1.4.0的ogg123、7za 16.02(x64), openssl base64
(LibreSSL 2.2.7)。
這不是一個完整的修復程序,但是我確實將其與以下代碼一起使用:
mplayer <(openssl base64 -d <<SND
dGhpcyBiYXNlNjQgd291bGQgYmUgdGhlIGJhc2U2NCBvZiBteSBvZ2cgZmlsZQ==
SND
)
支持mplayer
讀取這樣的原始數據(也可以從stdin讀取!)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.