我的脚本中有一部分无法按预期运行。它应该获取以换行符分隔的剧集路径列表,格式为“/volume1/Shared Files/Cartoon/Show Name/Show Name SXX/file.mkv”(列表文件中包含引号),通过 mediainfo 运行这些文件并将 UID 附加到每一行。
我可以使用一行代码获取 UID
/volume1/@appstore/nzbdrone/bin/mediainfo "/volume1/Shared Files/Cartoon/Show Name/Show Name SXX/file.mkv" | grep Unique | awk '{print $4}'
但是,当执行以下代码时:
while read line; do
echo $line
/volume1/@appstore/nzbdrone/bin/mediainfo $line | grep Unique | awk '{print $4}' > $WorkingDir/output2.txt
echo `/volume1/@appstore/nzbdrone/bin/mediainfo $line | grep Unique | awk '{print $4}'`
var1=`echo /volume1/@appstore/nzbdrone/bin/mediainfo $line | grep Unique | awk '{print $4}'`
echo $var1
done < $WorkingDir/output.txt
我得到以下输出:
"/volume1/Shared Files/Cartoon/Show Name/Show Name SXX/file.mkv"
"/volume1/Shared Files/Cartoon/Show Name/Show Name SXX/file.mkv"
"/volume1/Shared Files/Cartoon/Show Name/Show Name SXX/file.mkv"
"/volume1/Shared Files/Cartoon/Show Name/Show Name SXX/file.mkv"
"/volume1/Shared Files/Cartoon/Show Name/Show Name SXX/file.mkv"
"/volume1/Shared Files/Cartoon/Show Name/Show Name SXX/file.mkv"
我知道这不会将 UID 附加到我想要的位置,这只是调试的尝试。我希望每个 echo $line 之间的两个空白行中至少有一个包含 UID。我不知道哪里出了问题 :/
(在 Synology DS412+ 上的 bash 下运行)
答案1
双引号被读入line
变量并作为参数的一部分传递给mediainfo
。我不喜欢使用read
读取整行,而更喜欢使用命令line
。
您应该从输入中删除引号,而使用:-
while line=`line`; do
. . . . . .
/volume1/@appstore/nzbdrone/bin/mediainfo "$line" | grep Unique | awk '{print $4}' > $WorkingDir/output2.txt
. . . . . .
您应该对所有的实例进行双引号$line
,而不仅仅是在我所显示的行中。
请注意,line
准确读取行,包括删除的前导和尾随空白read
。