cd命令在shell脚本中没有按预期工作

时间:2014-04-08 12:26:25

标签: shell

我有很多专辑,每个专辑都放在一个文件中,我想把它分成曲目。我可以保证每个文件夹只有一个flac文件,其中一个同名的cue文件。

我写道:

#!/bin/sh
IFS=$'\n'
current=`pwd`
for d in `find . -name *.cue -print0 | xargs -0 -n1 dirname | sort --unique`
do
  cd \""$d"\"
  f=`ls *.cue`
  cuebreakpoints *.cue | shnsplit flac *.flac
  cuetag *.cue split*.flac
  rm ${f%.cue}.*
  cd \""$current"\"
done
unset IFS

由于find命令没有转义文件名,我将IFS更改为换行符。当我执行脚本时,它在两个cd行中失败,表示提供的路由不存在。

例如,假设这个文件结构:

> Downloads
    split.sh
    > Music
        > FLAC
            > Goa Trance
                > Others
                    > (1997) Test Label - Album Name - Subtitle Of The Album
                        album test.flac
                        album test.cue

当我执行脚本时会抛出两个错误(以及由于目录未更改而导致的其他错误):

./split.sh: line 6: cd: "./Music/FLAC/Goa Trance/Others/(1997) Test Label - Album Name - Subtitle Of The Album": No such file or directory
...
./split.sh: line 11: cd: "/Users/robotFive/Downloads": No such file or directory

但如果我执行完全正确的话:

cd "./Music/FLAC/Goa Trance/Others/(1997) Test Label - Album Name - Subtitle Of The Album"
cd "/Users/robotFive/Downloads"

你知道会发生什么吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

我认为有一个逃脱,改变:

cd \""$d"\"

为:

cd "$d"