Bash 为什么lsof错误地解释了我的变量?
我正试图设置一个循环来监视苹果压缩机正在编写的文件。一旦文件不再被写入,我想更改它所在目录的名称。但是,当我将包含filepath的变量馈送到Bash 为什么lsof错误地解释了我的变量?,bash,function,variables,lsof,Bash,Function,Variables,Lsof,我正试图设置一个循环来监视苹果压缩机正在编写的文件。一旦文件不再被写入,我想更改它所在目录的名称。但是,当我将包含filepath的变量馈送到lsof时,它会显示为乱码 例如,存储为$Output的“/Users/leftright/Desktop/Output/${process##*/}\u PROCESSING/”被lsof解释为DHt\x96?\x7f。在lsof手册页中,我看不到任何东西可以说明发生这种情况的原因。它是在函数中的if/then语句中调用的 #!/bin/bash co
lsof
时,它会显示为乱码
例如,存储为$Output
的“/Users/leftright/Desktop/Output/${process##*/}\u PROCESSING/”
被lsof
解释为DHt\x96?\x7f
。在lsof
手册页中,我看不到任何东西可以说明发生这种情况的原因。它是在函数中的if/then语句中调用的
#!/bin/bash
compressor() {
filepath="$1"
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”前面留下了空格,这导致它的评估不正确。Cyrus对shellcheck.net的建议发现了问题。请看一看:谢谢Cyrus!这是一个非常好的资源。我已将其添加到我的书签中。