2017-03-05 175 views
0

這是說明我的問題makefile文件的降低例如:執行錯誤

exec: 
    time (ls > ls.txt; echo $$? > code) 2> time.txt 

化妝EXEC一個Linux系統下運行正常:

Linux-2.6.32-642.4.2.el6.x86_64-x86_64-with-centos-6.8-Final 

但下失敗我的Ubuntu安裝:

Linux-4.4.0-64-generic-x86_64-with-Ubuntu-16.04-xenial 

and pr oduces消息:如果

/bin/sh: 1: Syntax error: word unexpected (expecting ")") 

沒有問題我從終端運行命令時間直接。

在不同的Linux安裝中是否有不同版本的命令?我需要允許一系列命令的版本。

回答

0

在「時間」前加分號。因爲,make會試圖將你的命令解析爲一個依賴關係列表。

2

始終調用/bin/sh來運行配方。在某些系統上,/bin/sh是bash的別名,它對標準POSIX shell(sh)有很多額外的擴展。在其他系統(如Ubuntu)上,/bin/sh是破折號的別名,它更小,更簡單,更接近普通POSIX外殼。

Bash有一個內置的time操作,它接受整個管道並顯示所需的時間(在bash shell命令提示符下運行help time查看文檔)。其他像破折號的shell沒有內置的time,所以當你運行它時你會得到程序/usr/bin/time;運行man time查看文檔。作爲一個單獨的程序,它當然不能對整個管道進行計時(因爲管道是殼的一個功能);它只能計時一個人的命令。

你有多種選擇:加入

你可以強迫你的makefile始終使用bash作爲其外殼:

SHELL := /bin/bash 

它。我建議在那裏添加一條評論以及描述爲什麼需要特定的bash。

,也可以修改您的規則通過使shell調用明確,使time只有一個命令來調用一個便攜式的工作方式:

exec: 
     time /bin/sh -c 'ls > ls.txt; echo $$? > code' 2>/time.txt 
0

奏效是強制bash中唯一的建議我生成文件:

SHELL := /bin/bash 

我查了一下:我的Ubuntu的機器上,/ bin/sh的是真的/斌/破折號,而CentOS的機器上是/斌/慶典!

謝謝!

+0

順便說一句,使shell調用明確的建議不會將輸出文件重定向到'time.txt'。 – Tsf