嗨,但如果我的字符串中有空格,它将无法正常工作。我的整个脚本都在这里:
#!/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)
Bash引号是句法上的,而不是字面意义上的。和往常一样,Greg的Wiki提供了你所希望的最优秀的解释。
尝试删除*,递归复制不需要它。
cp -rf "$1"/* "$2"
至:
cp -rf "$1/" "$2"
我认为globbing破坏了你的引用,因为它保护你不受文件名中空格的影响。