Shell-Script

從函式內部獲取 shell 腳本的名稱

  • June 4, 2020

說我有這個:

#!/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 like pwd,真的存在嗎?

我無法重現這個。該問題標有“/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/testI do get Usage: 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是錯誤的。

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