如何使用shell脚本

时间:2017-03-29 16:32:13

标签: linux bash shell

我无法弄清楚如何使用shell脚本中的参数启动自编程序。如果我在父文件夹包含二进制文件的文件夹中,那么我可以用

启动该程序
$ ../binary --opt1 arg1 --opt2 arg2

现在,假设参数和选项列在当前文件夹的文件args中。

args.txt:

--opt1 arg1 --opt2 arg2

如果我正在尝试从当前文件夹中的shell脚本执行二进制文件,如:

$ ./script.sh args.txt

script.sh:

#!/bin/bash

if [ $# != 1 ]
then
    exit 1;
 fi

 params=$(<"$1")

../binary "$params"
# ../binary <<<"$params" doesn't work either.

我该如何做到这一点?

编辑(更新的脚本):

#!/bin/bash

if [ $# != 1 ]
then
    exit 1;
fi

params=$(<"$1")

START=$(date +%s)
../binary "$params"
# ../binary <<<"$params" doesn't work either.
END=$(date +%s)                                                                                                                             
DIFF=$(( $END - $START ))                                                                                   
echo "Test took $DIFF seconds"

1 个答案:

答案 0 :(得分:0)

使用命令替换:

$ ./script.sh args.txt

./script.sh的内容

#!/bin/bash
../binary $(< "$1")
  

命令替换

     

命令替换允许输出命令来替换命令名称。有两种形式:

          $(command)
   or
          `command`
     

Bash通过执行命令并用命令的标准输出替换命令替换来执行扩展,删除任何尾随换行符。嵌入的换行不会被删除,但在分词时可能会被删除。命令替换$(cat file)可以替换为等效但更快$(< file)

     

当使用旧式反引号替换形式时,反斜杠保留其字面含义,除非后跟$,`或\。第一个反引号前面没有反斜杠会终止命令替换。使用$(command)表单时,括号内的所有字符组成命令;没有人受到特别对待。

     

命令替换可以嵌套。要在使用反引号形式时进行嵌套,请使用反斜杠转义内部反引号。如果替换出现在双引号内,则不会对结果执行单词拆分和路径名扩展。