1

スクリプト B を作成するスクリプト A を作成したいと思います。スクリプト B はディレクトリを作成します。そこで、この内容でファイルを作成し、x パーミッションを付与してから実行しました。残念ながら、期待どおりに動作しません。最初にディレクトリを作成し、次に空のファイルを作成します。なんで?

#!/bin/bash
batch=`mkdir /home/hieund/bpl`
echo $batch > newfile

更新:あなたのソリューションを試した後、私は持っています:

#!/bin/bash
$myPath=$HOME/bpl
batch='mkdir ' $myPath
echo $batch > newfile

それもうまくいきません。同じ予期しない動作。

アップデート:

#!/bin/bash
$myPath=$HOME/bpl
batch="mkdir $myPath"
echo $batch > newfile

それもうまくいきません。同じ予期しない動作。

bash: /home/hieund/bpl=/home/hieund/bpl: No such file or directory
4

2 に答える 2

4

「コマンド置換」で言ったので、割り当ての瞬間にディレクトリを作成します

batch=`mkdir /home/hieund/bpl`

実行の流れ

  1. mkdir /home/...- ディレクトリを作成する - バッククォートのため - コマンド置換
  2. したがって、mkdir何も返されません
  3. 割り当ては次のようbatch=になります(何も割り当てません)
  4. echo $batchは「何もない」ので、エコー:echo > newfile

あなたが使用する必要があります

batch='mkdir /home/hieund/bpl'

変数を埋め込むには、二重引用符を使用します

batch="mkdir $myPath"

bash -x script- を使用して、実行中のものをいつでも表示できます。たとえば、スクリプトを持っているmyscript.sh

#!/bin/bash
MYDIR="./somedir"
batch="mkdir $MYDIR"
echo "$batch" > newfile

コマンド

bash -x myscript.sh

コマンドと引数の実行を表示します。(注意、リダイレクトは表示されません)

+ MYDIR=./somedir
+ batch='mkdir ./somedir'
+ echo 'mkdir ./somedir'

1 つのコメント: スペースの問題を回避できるため、通常は二重引用符で変数に代入する必要があります。ノート

myvar=$VAR/some

myvar="$VAR/some"

$VARにスペースが含まれている場合、大きな違いが生じます。

于 2013-06-01T08:56:51.837 に答える