0

最近、ksh93 シェルに切り替えました。これを行うには、次の 2 行を .profile ファイルに追加しました。

export SHELL=/usr/local/bin/ksh93
exec $SHELL

私がそれを行って以来、いくつかの単純なスクリプトが、私が理解できない方法で誤動作し始めました。say と呼ばれる次の単純なスクリプトに絞り込みましたtest.sh

#!/bin/ksh
echo $0 $1

コマンドtest.sh fredを入力すると、同じ出力が表示されるはずtest.sh fredです。代わりに私は見るtest.sh noglob。シバンを削除するか、読み取りに変更すると#!/usr/local/bin/ksh93、スクリプトは期待どおりに機能します。

何が起こっているのか、またはそれに対して何をすべきかを誰か説明できますか? 私は困惑しています。

違いがある場合は、Solaris 5.9 を使用しています。

4

2 に答える 2

2

コメントから、あなた.kshrcにはset noglob. setオプションのないコマンドは、コマンド ライン パラメータを設定します。これが「noglob」である理由$1ですset -o noglob

ところで、設定noglobがおかしいのですが、よろしいですか?

私は(他の人が言及しているように)それ/bin/kshがKorn shell 88
であると考えています.ksh88とksh93には.kshrc. ksh88.kshrcでは、非対話型 (スクリプト) であっても、すべての korn シェル プロセスに対して実行されます。ksh93では、シェル スクリプトに対して.kshrcは実行され、対話型ログイン シェルに対してのみ実行されます。

exec $SHELLログイン シェルではない場合は、 のエントリを変更することをお勧めします/etc/passwd。ちなみに、変数SHELLはログイン シェルによって設定されるため、変数の使用はお勧めできません。

于 2012-09-05T16:20:05.427 に答える
1

おそらく、システムの ksh に noglob がオプションとして設定されたエイリアスがあるか、古いシェルでデフォルトで noglob がデフォルト パラメータとして渡されています。実際に呼び出している ksh も確認する必要があります (/bin/ksh から別のシェルへのリンクがあるかどうかを確認してください)。ksh --version もいくつかの洞察を与えるはずです。

最後のポイントとして、シェルを直接呼び出す代わりに、使用することをお勧めします

 #!/usr/bin/env ksh
于 2012-09-05T13:12:52.330 に答える