开发者

BASH File Spaces

Hi but it appears that if my strings have spaces in it, it won't work properly. My entire script is here:

#!/bin/bash  
echo $#; echo $@
MoveToTarget() {
    #This takes to 2 arguments: source and target
        echo ""$1"  "$2""
    cp -rf "$1"/* "$2"
    rm -r "$1"
}

WaitForProcessToEnd() {
    #This takes 1 argument. The PID to wait for
    #Unlike the AutoIt version, this sleeps 1 second
    while [ $(kill -0 "$1") ]; do
            sleep 1
    done
}

RunApplication() {
    #This takes 1 application, the path to the thing to execute
    open "$1"
}

#our main code block
pid="$1"
SourcePath="$2"
DestPath="$3"
ToExecute="$4"
WaitForProcessToEnd $pid
MoveToTarget "$SourcePath" "$DestPath"
RunApplication "$ToExecute"
exit

Note that I have tried the variables like开发者_如何转开发 $DestPath with and without quotes around them, with no luck. This code gets run with a Python script, and when the arguments are passed, quotes are around them. I appreciate any help!

Edit: (Python script)

bootstrapper_command = r'"%s" "%s" "%s" "%s" "%s"' % (bootstrapper_path, os.getpid(), extracted_path, self.app_path, self.postexecute)
shell = True
subprocess.Popen(bootstrapper_command, shell=shell)


Bash quotes are syntactic, not literal. Greg's Wiki, as usual, has the most excellent explanation you could wish for.


Try removing the *, it isn't needed for recursive copy.

cp -rf "$1"/* "$2"

to:

cp -rf "$1/" "$2"

I think globbing was ruining your quoting that was protecting you from spaces in filenames.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜