簡體   English   中英

無法將原始數據發送到命令(重擊)

[英]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 -si7za e -si並將<<< 7za e -siogg123 (我的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM