簡體   English   中英

無法執行二進制文件錯誤

[英]Cannot execute binary file error

我有一個shell腳本,試圖以特定用戶身份運行。 我的命令如下所示:

su - jetty sh ./runProgram.sh

當我嘗試通過控制台運行此命令時,出現錯誤消息:

/bin/sh: /bin/sh: cannot execute binary file

我也嘗試過:

 su - jetty sh runProgram.sh

而且我仍然遇到相同的錯誤。

如果執行此操作,它將起作用:

sh runProgram.sh

但是,此Shell腳本應由特定用戶運行。 關於如何使它工作的任何建議?

嘗試

su - jetty -c sh runProgram.sh

根據su的文檔( info coreutils 'su invocation' ),它將默認執行一個shell,並將su的參數作為參數傳遞給該shell。

含義很簡單: su實際上是在做: /bin/sh *arguments_to_su*但是它是作為另一個用戶(“有效用戶ID”)來完成的……就這么簡單了。

su - jetty sh ./runprogram.sh

類似於

(become the user jetty via login or su)
/bin/sh sh ./runprogram.sh

...並且外殼程序將報告錯誤,因為第一個/bin/sh (由su調用)正試圖將程序sh作為外殼程序腳本運行,並以./runprogram.sh作為其參數。 但是sh本身不是shell腳本,它是二進制文件(它的工作是運行shell腳本)。

如果您只是要這樣做:

su - jetty ./runprogram.sh

然后, su命令將使用程序./runprogram.sh作為其參數,並使用jetty作為有效的用戶ID來調用/bin/sh ,一切都應該很好。 ...應該很好,因為既然您正在執行su -您就將Shell設為登錄Shell並更改為用戶的主目錄。 如果runprogram.sh不在主目錄中,則會出現錯誤。

這也是為什么您也不能通過以下簡單方式運行例如運行cp命令的原因:

su - jetty cp file1 file2

...因為再次,在su將有效用戶ID更改為jetty后,它將嘗試以下操作:

/bin/sh cp file1 file2

...而且cp不是shell腳本。 但是-c選項在這種情況下有效; 因為您告訴su您想使用/bin/sh c /bin/sh shell選項運行/bin/sh

su - jetty -c "cp file1 file2"

做這份工作。 請注意,您必須引用該命令,因為整個字符串都將傳遞給外殼程序,並且(我相信)以下任何參數都將被忽略。

最后,上一個發布者的答案在Linux上對我不起作用,它要求使用整個命令字符串加引號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM