2

移植可能なシェル スクリプトの書き方を学ぼうとしています。そのために、個人用ユーティリティを bash から sh (私のシステムではダッシュ) に移行し始めています。ただし、デバッグ モードでスクリプトを実行しようとすると、常にエラーが発生します。$ dash -x script

たとえば、このスクリプトでは:

#!/bin/sh
echo hi

as: として実行すると$ dash script、「hi」文字列が返されますが、次のように実行した場合、またはecho の前にコマンド$ dash -x scriptを追加した場合:set -x

#!/bin/sh
set -x
echo hi

次のエラーで失敗します。

script.sh: 3: script.sh: 不適切な置換

これにより、スクリプトのデバッグが非常に困難になります。ダッシュ0.5.7-2ubuntu2でubuntu 12.04を実行しています

4

1 に答える 1

3

質問を書き終える頃には、個人用の PS4 (xtrace モードで使用) を使用していることに気付きました。私の PS4 は次のように定義されていました。

>>(${BASH_SOURCE}:${LINENO}): ${FUNCNAME[0]:+${FUNCNAME[0]}(): }

一時的に PS4=">>" に変更したところ、すべて問題なく動作し、ダッシュでスクリプトをデバッグできるようになりました。これが誰かに役立つことを願っています。

于 2013-10-26T06:40:21.953 に答える