簡體   English   中英

bash腳本中的mkdir錯誤

[英]mkdir error in bash script

以下是我在Windows上運行在cygwin下的bash腳本的一個片段:

deployDir=/cygdrive/c/Temp/deploy

timestamp=`date +%Y-%m-%d_%H:%M:%S`
deployDir=${deployDir}/$timestamp

if [ ! -d "$deployDir" ]; then
    echo "making dir $deployDir"
    mkdir -p $deployDir
fi

這會產生如下輸出:

making dir /cygdrive/c/Temp/deploy/2010-04-30_11:47:58
mkdir: missing operand
Try `mkdir --help' for more information.

但是,如果我在命令行上鍵入/cygdrive/c/Temp/deploy/2010-04-30_11:47:58它成功,為什么同一命令在腳本中不起作用?

謝謝,唐

更改:

mkdir -p $deploydir

mkdir -p "$deployDir"

像大多數Unix shell一樣(甚至可能都是它們),Bourne(Again)Shell(sh / bash)區分大小寫。 除了mkdir命令之外,dir var在所有地方都被稱為deployDir (mixed-case),它被稱為deploydir (全部小寫)。 由於deploydir (全部小寫)是deployDir (mixed-case)中的一個被認為是不同的變量,而deplydir (全部小寫)從未為其分配過值,因此deploydir (全部小寫)的值為空字符串(“”)。

如果沒有引號( mkdir $deploydir ),該行有效地變為mkdir (只是沒有所需操作數的命令),因此錯誤mkdir: missing operand

使用引號( mkdir "$deploydir" ),該行有效地變為mkdir "" (使用非空目錄名稱為空字符串的目錄的命令),因此錯誤mkdir: cannot create directory '。

如果目標目錄名稱包含空格,建議使用帶引號的表單( mkdir "$deployDir" )。

更改:

mkdir -p $deploydir

mkdir -p "$deploydir"

出於顯而易見的原因,您不能在Windows上的文件名中使用冒號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM