将命令存储到文件

时间:2013-06-01 08:51:13

标签: bash

我想创建一个脚本A来创建脚本B.脚本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

2 个答案:

答案 0 :(得分:4)

它在分配时创建了一个目录,因为你用"命令替换"

说了这个
batch=`mkdir /home/hieund/bpl`

执行流程

  1. mkdir /home/... - 创建目录 - 因为反引号 - 命令替换
  2. mkdir不返回任何内容,因此
  3. 分配就像batch=(它没有任何分配)
  4. echo $batch回应"没有"所以:echo > newfile
  5. 你应该使用

    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'
    

    一条评论:您通常应该使用双引号将事物分配给变量,因为您可以避免使用空格问题。注意

    myvar=$VAR/some
    

    myvar="$VAR/some"
    
    $VAR包含空格时,

    会产生很大的不同。

答案 1 :(得分:0)

因为反引号不用于字符串。

batch="mkdir /home/hieund/bpl"