我有一个非常简单的脚本,如下所示:
#!/bin/bash
VAR1="$1"
MOREF='sudo run command against $VAR1 | grep name | cut -c7-'
echo $MOREF
Run Code Online (Sandbox Code Playgroud)
当我从命令行运行此脚本并将参数传递给它时,我没有得到任何输出.但是,当我运行$MOREF变量中包含的命令时,我能够获得输出.
我想知道如何获取需要在脚本中运行的命令的结果,将其保存到变量,然后在屏幕上输出该变量?
我经常发现Bash语法非常有用,例如像diff <(sort file1) <(sort file2).中的进程替换.
是否可以在Makefile中使用此类Bash命令?我在考虑这样的事情:
file-differences:
diff <(sort file1) <(sort file2) > $@
Run Code Online (Sandbox Code Playgroud)
在我的GNU Make 3.80中,这会产生错误,因为它使用shell而不是bash执行命令.
我想在我的 makefile 中使用 bash 计时变量,例如在我的终端中我可以这样做并且它可以工作
MY_TIME=$SECONDS
echo $MY_TIME
Run Code Online (Sandbox Code Playgroud)
但是当我在我的 makefile 上写这个时它不起作用
如何在我的 make 文件中使用这两行?
这就是我正在做的
.PHONY: myProg
myProg:
MY_TIME=$SECONDS
echo $MY_TIME
Run Code Online (Sandbox Code Playgroud)
在 Etan Reisner 的回答之后
这就是我现在所拥有的
.PHONY: myProg
myProg:
MY_TIME= date; echo $MY_TIME
Run Code Online (Sandbox Code Playgroud)
但是我的 echo 的结果是一个空行,它看起来不像是在存储日期
这是一个在我的 bash shell 中运行良好的简单命令:
echo "Created at: $(date)" >> README.md
Run Code Online (Sandbox Code Playgroud)
它附加Created at: Wed Jan 24 10:04:48 STD 2018到 README.md。
但是,当我在 makefile 中包含相同的命令时,行为有所不同。
生成文件:
README.md:
echo "Created at: $(date)" >> README.md
Run Code Online (Sandbox Code Playgroud)
运行时make README.md会将命令替换视为空字符串,如下所示:
echo "Created at: " >> README.md
Run Code Online (Sandbox Code Playgroud)
README.md 中附加的内容是Created at:.
如何在 makefile 中使用 echo 正确地进行命令替换输出?