Shell-Script

“找不到命令”將參數從 Makefile 傳遞到 shell 腳本

  • February 16, 2020

我有一個info.properties文件,我有這個MY_NAME屬性,我可以在我的Makefile. 我已經嘗試過,但我不能直接在myScript.sh文件中使用該屬性。

所以我試圖將該屬性作為參數傳遞給myScript.sh. 我正在這樣做:

在 Makefile 上:

my_stage:
   chmod 777 myScript.sh && ./myScript.sh $(MY_NAME)

在 myScript.sh 我有這個:

#!/bin/bash -e
source .build/utils.sh

MY_NAME=$1
echo "MY_NAME=${MY_NAME}"

但我總是收到這個錯誤:

chmod 777 myScript.sh && ./myScript.sh My-name-Mariana
.build/utils.bash: line 596: My-name-Mariana: command not found
make: *** [test] Error 127

我該如何解決這個問題?

更新:

我知道.build/utils.bash正在嘗試執行我的參數,我可以在錯誤中看到這一點。但我無法更改該文件,因為我沒有它,因為它不是我的程式碼項目的一部分。

由於您的腳本可以 source .build/utils.bash,因此您已經證明您實際上可以閱讀它。例如,嘗試less .build/utils.bash在包含 Makefile 的目錄中。

要在不修改的情況下解決實際問題.build/utils.bash,您可以嘗試將 的內容分配$1到您的MY_NAME變數中,然後使用shift命令將其從$1- before you中刪除source .build/utils.sh

但是隨後作為空字元串utils.bash接收$1,這可能會導致它失敗或做一些不同的事情——如果不閱讀utils.bash或一些關於它的文件,就不可能知道它期望什麼。

.build/utils.bash在您嘗試My-name-Mariana作為命令呼叫的腳本的第 596 行(左右) 。作為文字或作為$1. 它不存在,因此執行立即失敗(由於-e標誌 on bash)。

.build/utils.bash: line 596: My-name-Mariana: command not found

解決方案是修復程式碼。您沒有在此處提供它,因此我們無法提供具體建議,但我相信如果您使用相關上下文更新您的問題,有人會很樂意這樣做。

引用自:https://unix.stackexchange.com/questions/567767