将终端的动态输出写入文本文件

Ami*_*ani 4 sound command-line bash scripts sox

归结为能够dynamic output将终端的(我将解释)保存到文本文件中,但这就是我最终要寻找的。

我为名为 的终端创建了一个自定义命令playRandom,它的作用是永远播放随机歌曲。我为此创建的 bash 文件:

#!/bin/bash 
find ./ -type f | sort -R | xargs -I + play +
Run Code Online (Sandbox Code Playgroud)

注意:该play命令来自SoX软件。

现在输出看起来像这样:

playRandom 命令

正如你所看到的输出变化dynamically,所以我不能>>用来保存输出。

我希望能够将“播放的歌曲名称”保存到文本文件中。

我怎样才能实现这个目标?提前致谢。

Ser*_*nyy 10

保存当前播放的文件名

由于play命令在播放单个文件后终止,因此我们可以做的不是使用xargs并给出play一批文件,而是将每个文件一次一个取出,并将其回显到文件中,然后再播放文件。编辑后的脚本如下所示。请注意,这里添加了额外的选项和IFS= read -d'' -r命令,以安全的方式处理文件名。

#!/bin/bash 

# create file for playing songs first
echo > playlist.txt

# Now play each song and echo filename to file
find ./ -type f -print0 | sort -z -R | while IFS= read -d '' -r filename
do
    clear
    echo "$filename" >> playlist.txt
    play "$filename"
done
Run Code Online (Sandbox Code Playgroud)

这种方法的优点是文件名将在播放时进入 playlist.txt,这使我们能够实时跟踪脚本的输出,例如tail -F playlist.txt.

注意:为了避免playlist.txt被列在find's output changefind命令中,如下所示:

find ./ -type f -not -name "playlist.txt" -print0
Run Code Online (Sandbox Code Playgroud)

此外,如果我们想确保只.mp3列出文件,我们可以这样做:

find ./ -type f \( -not -name "playlist.txt" -and -name "*.mp3" \) -print0
Run Code Online (Sandbox Code Playgroud)

保存找到的要播放的文件列表

如果我们的目标是安全的文件列表之前更是打出了,有没有很多科学的它-查找,排序管道可以首先被写入文件,而该文件随后被送入play或者通过xargs或再通过while IFS= read -r ; do ... done结构

find ./ -type f -not -name "playlist.txt" -print0
Run Code Online (Sandbox Code Playgroud)


wal*_*tor 8

find ./ -type f | sort -R | tee text.file | xargs -I + play +  
Run Code Online (Sandbox Code Playgroud)

另见man tee