Shell-Script
從函式內部獲取 shell 腳本的名稱
說我有這個:
#!/bin/sh function show_help { cat<<% Usage: $0 [-h] % } # the following lines is pseudo-code if argument contains "-h" show_help otherwise do_stuff
如果我執行
./test
它會按預期做一些事情,但如果我執行./test -h
它會產生Usage: show_help [-h]
但我打算讓它產生
Usage: ./test [-h]
那麼我怎樣才能通過只修改
show_help
函式來實現呢?我不想修改腳本本身,所以我不會只SCRIPT_NAME=$0
在 shebang 行下添加。我希望解決方案是某種內置變數 like
$PWD
或 function likepwd
,真的存在嗎?
我無法重現這個。該問題標有“/bash”。
對於 bash,$0 始終是腳本的名稱,所以如果它位於 /tmp/test
#!/bin/bash function show_help { cat <<% Usage: $0 [-h] % } show_help
然後
bash /tmp/test
給我Usage: /tmp/test [-h]
。如果我使用
ksh93 /tmp/test
I do getUsage: show_help [-h]
,因為當您以非 POSIX 方式聲明函式時 ksh 設置 $0 。切換到可移植函式聲明
#!/bin/bash show_help() { cat <<% Usage: $0 [-h] % } show_help
你可以
Usage: /tmp/test [-h]
從 ksh 和 bash 中獲得。所以原始腳本中有多個錯誤。如果問題是關於 bash的,
#!/bin/sh
應該是#!/bin/bash
函式聲明不正確,最後的語法if
是錯誤的。