[英]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.