私がこれを持っているとしましょう:
#!/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行の下にしか追加しません。ソリューションがaやfunctionなどの一種の組み込み
変数であることを願っています。実際に存在しますか?$PWD
pwd
ベストアンサー1
私はこれを再現できません。この質問には「/bash」タグが付けられています。
Bashの場合、$ 0は常にスクリプト名なので、/tmp/testにある場合
#!/bin/bash
function show_help {
cat <<%
Usage: $0 [-h]
%
}
show_help
それではbash /tmp/test
私にくださいUsage: /tmp/test [-h]
。
getを使用すると、POSIX以外の方法で関数を宣言するときにkshが$ 0を設定するため、ksh93 /tmp/test
getを使用します。Usage: show_help [-h]
移植可能な関数宣言に切り替える
#!/bin/bash
show_help() {
cat <<%
Usage: $0 [-h]
%
}
show_help
Usage: /tmp/test [-h]
kshとbashから入手できます。
だから元のスクリプトには多くのエラーがありました。#!/bin/sh
bashに関する質問であれば、関数宣言が正しくなく、#!/bin/bash
最後の構文が間違っています。if