$(dirname `readlink -f $ 0`)の奇妙な動作


11

次のコマンドを通常のユーザーとして実行すると、すべて問題ありません。

$(dirname `readlink -f $0`)

しかし、ルートに切り替えた後、次のエラーが発生しました:

readlink: invalid option -- 'b'
Try `readlink --help' for more information.
dirname: missing operand
Try `dirname --help' for more information.

何か案は?ローカルのFedora 16とAmazon EC2を試してみました。どちらもbashシェルを実行しています。

イラストのために編集します。

ここで問題をさらに説明しなかったことをお詫び申し上げます。ここにシナリオがあります:

通常のユーザーアカウントを使用:

$ pwd 
/home/myuser 
$ export MY_DIR=$(dirname `readlink -f $0`) 
$ echo MY_DIR 
/home/myuser

ルートを使用:

# pwd
/root
# export ROOT_DIR=$(dirname `readlink -f $0`)
readlink: invalid option -- 'b'
Try `readlink --help' for more information.
dirname: missing operand
Try `dirname --help' for more information.

# export ROOT_DIR=echo $(dirname `readlink -f -- $0`)
# echo $ROOT_DIR
/root

回答:


16

これは、ユーザーログインシェルと同じエラーになるはずです。ログインシェルでは、0シェルパラメーターが現在のプロセスの名前に展開され-bash、マイナス記号がログインシェルを示すためです。-bエラーの原因がわかります。

代わりに試してください

echo "$( dirname "$(readlink -f -- "$0")" )"

何ん--(「マイナスマイナス」または「ダッシュダッシュ」)を示していますか?Nevermind-私はここで答えを見つけました:https
//unix.stackexchange.com/q/11376

3

実行中のシェルスクリプトのディレクトリ名が本当に必要な場合:

script_dir="$(dirname -- "$(readlink -f -- "$0")")"

はい、それは少し不器用ですが、安全です。

現在のシェルが必要な場合は、@ MichaelMrozekが提案するを使用してみてください$SHELL

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.