Файловые пространства BASH - PullRequest
0 голосов
/ 15 июня 2011

Привет, но похоже, что если в моих строках есть пробелы, это не будет работать должным образом.Весь мой сценарий здесь:

#!/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

Обратите внимание, что я пробовал переменные типа $ DestPath с кавычками и без них, но безуспешно.Этот код запускается с помощью скрипта Python, и когда передаются аргументы, вокруг них заключаются кавычки.Я ценю любую помощь!

Редактировать: (скрипт Python)

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)

Ответы [ 2 ]

2 голосов
/ 17 июня 2011

Цитаты Bash являются синтаксическими, а не буквальными. Вики Грега , как обычно, дают самое прекрасное объяснение, какое только можно пожелать.

0 голосов
/ 17 июня 2011

Попробуйте удалить *, он не нужен для рекурсивного копирования.

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

до:

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

Я думаю, что глобализация разрушала ваши цитаты, которые защищали вас от пробелов в именах файлов.

...