回答
#! /bin/sh
# try executing this script with several arguments to see the effect
test ".$INNERCALL" = .YES || {
export INNERCALL=YES
# this method works both for shell and bash interpreters
sh -c ". '$0'" argv0new "[email protected]"
exit $?
}
printf "argv[0]=$0\n"
i=1 ; for arg in "[email protected]" ; do printf "argv[$i]=$arg\n" ; i=`expr $i + 1` ; done
這是另一種方法。它是通過直接執行命令來實現的,這比執行命令(點命令)要好一些。但是,這種方法僅適用於shell解釋,沒有慶典,因爲SH支持-s選項-c一起傳遞:
#! /bin/sh
# try executing this script with several arguments to see the effect
test ".$INNERCALL" = .YES || {
export INNERCALL=YES
cat "$0" | /bin/sh -s -c : argv0new "[email protected]"
exit $?
}
printf "argv[0]=$0\n"
i=1 ; for arg in "[email protected]" ; do printf "argv[$i]=$arg\n" ; i=`expr $i + 1` ; done
的這兩個例子的情況下./the_example.sh 1 2 3
預期結果應該是:
argv[0]=argv0new
argv[1]=1
argv[2]=2
argv[3]=3
奇怪的是,如果你把所有'/ bin/sh'改成'/ bin/bash',它就會停止工作。這是在Ubuntu 16.04 LTS安裝上。不知何故,在某些時候,Linux上帝選擇讓/ bin/sh成爲一些「破折號」,並不等於/ bin/bash。所選答案http://stackoverflow.com/a/24581562/257924沒有這個問題。 – bgoodr
@bgoodr你讀過這個答案的三維句子嗎? – sqrt163
同意。如果我清楚地閱讀了這句話,我沒有這樣做,「因爲sh支持」應該允許我在這種情況下將「shell解釋器」解釋爲「/ bin/sh」解釋器。 – bgoodr
- 1. 在Sublime文本中更改argv [0]
- 2. 通過更改argv [0]
- 3. 如何在NASM中打印argv [0]?
- 4. 如何在exec腳本中更改ant腳本中for循環的outputproperty值
- 5. 如何更改腳本中的變量?
- 6. 如何在gradle腳本中更改defaultConfig中的某些值?
- 7. 將參數傳遞給腳本,得到:「使用未初始化的值$ ARGV [0]」
- 8. 如何通過Unity中的腳本更改精靈的alpha值
- 9. 如何更改攪拌機腳本中形狀鍵的值?
- 10. 如何從Python腳本更改python文件中的變量值
- 11. 如何更改批處理腳本中的參數值
- 12. 如何在linux腳本中更改函數參數的值?
- 13. 如何更改文本框的值使用NSIS腳本?
- 14. 差(* ++的argv)[0]和同時(C = * ++的argv [0])
- 15. 如何更改SqlSyncProvider的配置腳本?
- 16. 爲什麼允許修改argv [0]?
- 17. Perl中,CMD,$ ARGV [0],慢
- 18. 在Haskell中設置argv [0]?
- 19. 如何知道argv [0]與argv [1]之間是否有空格
- 20. 爲什麼$#ARGV 0?
- 21. 如何更改使用PowerShell腳本
- 22. 如何檢測輸入文本中的值何時被腳本更改?
- 23. 如何編寫更改的腳本url
- 24. 如何更改Scala腳本的目錄?
- 25. 更改JQuery腳本內的值
- 26. 與Shell腳本更改CSS值 - Unix的
- 27. 如何將此腳本更改爲
- 28. 我如何更改這個腳本
- 29. 如何更改birt腳本中的條件的字體顏色
- 30. 如何用bash腳本更改變量的值?
有幾種方法可以改善這個答案。對發生的事情進行一些解釋會有所幫助。你可以使用'INNERCALL = YES exec sh -c'。'$ 0'「argv0new」$ @「'使內部調用代碼更簡潔。我有點懷疑是否有辦法打破''。 '$ 0'命令,但是我可以立即想到的技術需要足夠的不尋常的設置,我可以把它放在一邊。但沒有解釋,我不認爲這是一個好的答案。 –
@JonathanLeffler任何軟件運行良好。源代碼是最好的解釋;) – sqrt163
顯然不是。看到這個後續問題:https://stackoverflow.com/questions/48407615/how-to-change-argv0-value-using-bash-shell-explanation-required – tripleee