为什么 lsof 会错误地解释我的变量?
Why does lsof interpret my variables incorrectly?
我正在尝试设置一个循环来监视 Apple Compressor 正在写入的文件。一旦文件不再被写入,我想更改它所在目录的名称。但是,当我将包含文件路径的变量提供给 lsof
时,它会出现乱码。
例如,存储为 $output
的 "/Users/leftright/Desktop/Output/${process##*/}_PROCESSING/"
被 lsof
解释为 DHt\x96?\x7f
。我在 lsof
联机帮助页中看不到任何内容来说明为什么会这样。它在函数内的 if/then 语句中被调用。
#!/bin/bash
compressor() {
filepath=""
process="${filepath%.*}"
output="/Users/leftright/Desktop/Output/${process##*/}_PROCESSING/"
filename="${filepath##*/}"
moving="${output}""${filepath##*/}"
cleanname="${filename%.*}"
final= "${output}""${cleanname}".mp4
completed="/Users/leftright/Desktop/Output/${process##*/}_COMPLETED/${cleanname}.mp4"
mkdir -m 777 "$output";
mv "$filepath" "$moving";
/Applications/Compressor.app/Contents/MacOS/Compressor -computergroup "This Computer" -jobpath "$output""$filename" -settingpath /Users/leftright/Documents/CONVERTHQTEST.cmprstng -locationpath "$final";
while true; do
if lsof "$final" > /dev/null; then
sleep 1
else
mv "$final" "$completed"
fi
done
}
export -f compressor
fswatch -0 -v --event Created /Users/leftright/Desktop/Watch | xargs -0 -n1 -I filepath bash -c 'compressor "filepath"'
我做错了什么?
对于那些在家里玩的人,我在 final= "${output}""${cleanname}".mp4
前面留下了空格,导致它被错误地评估。赛勒斯 shellcheck.net 的建议找到了问题。
我正在尝试设置一个循环来监视 Apple Compressor 正在写入的文件。一旦文件不再被写入,我想更改它所在目录的名称。但是,当我将包含文件路径的变量提供给 lsof
时,它会出现乱码。
例如,存储为 $output
的 "/Users/leftright/Desktop/Output/${process##*/}_PROCESSING/"
被 lsof
解释为 DHt\x96?\x7f
。我在 lsof
联机帮助页中看不到任何内容来说明为什么会这样。它在函数内的 if/then 语句中被调用。
#!/bin/bash
compressor() {
filepath=""
process="${filepath%.*}"
output="/Users/leftright/Desktop/Output/${process##*/}_PROCESSING/"
filename="${filepath##*/}"
moving="${output}""${filepath##*/}"
cleanname="${filename%.*}"
final= "${output}""${cleanname}".mp4
completed="/Users/leftright/Desktop/Output/${process##*/}_COMPLETED/${cleanname}.mp4"
mkdir -m 777 "$output";
mv "$filepath" "$moving";
/Applications/Compressor.app/Contents/MacOS/Compressor -computergroup "This Computer" -jobpath "$output""$filename" -settingpath /Users/leftright/Documents/CONVERTHQTEST.cmprstng -locationpath "$final";
while true; do
if lsof "$final" > /dev/null; then
sleep 1
else
mv "$final" "$completed"
fi
done
}
export -f compressor
fswatch -0 -v --event Created /Users/leftright/Desktop/Watch | xargs -0 -n1 -I filepath bash -c 'compressor "filepath"'
我做错了什么?
对于那些在家里玩的人,我在 final= "${output}""${cleanname}".mp4
前面留下了空格,导致它被错误地评估。赛勒斯 shellcheck.net 的建议找到了问题。