1

質問はタイトルにあります。私はグーグルで何も見つけられなかったので、ここの誰かが私にこれを説明してくれることを願っています.

debian 6.0.5 を使用しており、/etc/passwd ファイルで実行ユーザーに割り当てられているシェルは /bin/bash です。

したがって、単純に書き込むだけcd ~で、ユーザーのホーム ディレクトリに移動できます。

test -d "~/some_dir"if ステートメントで false を返します ( some_dir exsits )

編集:申し訳ありませんが、/bin/bash cd ~代わりに書いていた理由をもっと明確にする必要がありましたcd ~:私はbashスクリプトを書いて#!/bin/bashおり、上記のifステートメントはfalse句になります。

4

4 に答える 4

4

次のことを試してください。

/bin/bash -c "cd ~"
于 2012-08-26T19:32:49.347 に答える
3

あなたがしたと仮定して

$ /bin/bash cd ~

cdへの引数として解釈されたシェル/bin/bash。その構文は、たとえば、シェル スクリプトを呼び出すために使用できます。

最も可能性が高いのは、現在の作業ディレクトリを変更することでした。その場合、必要なのは

$ cd ~ 
于 2012-08-26T19:32:25.873 に答える
3

コマンドラインのオプションは、内部コマンドであっても、コマンドが実行される前に展開されます。実行に使用しているシェルが何であれ/bin/bash cd ~、ホーム ディレクトリに展開される特殊文字ではなく、チルダを文字どおりに解釈していると思われます。

テストとして、その名前でディレクトリを作成してみて、エラーが解消されるかどうかを確認してください。

> mkdir ./~
> /bin/bash cd ~

このコマンドは、実行中のシェル内で実行cdする必要があることに注意してください。サブシェルの作業ディレクトリを変更してからサブシェルを終了すると、開始した場所に戻っていることに気付くでしょう。

更新

$HOMEbash スクリプト内から、一貫してホーム ディレクトリを含む環境変数を使用できるはずです。どのような条件でチルダ展開が失敗するかはわかりませんが、常に使用してきました$HOME

また、特定のディレクトリに変更できるかどうかを判断するときは、明示的で有用なステータスを返すオプションがあります。

unset err
if [[ ! -d "$somedir" ]]; then
  err="Can't find $somedir"
elif [[ ! -r "$somedir" ]]; then
  err="Can't read $somedir"
fi

if [[ -n "$err" ]]; then
  echo "$ERROR: $err" >&2
  exit 1
fi

cd "$somedir"

または、CD を試してその結果を確認することもできます。

if ! cd "$somedir"; then
  echo "ERROR: $somedir not availble"
  exit 1
fi

詳細なエラー レポートは便利ですが、必要ない場合は、コードを小さくしておくことにも利点があります。

于 2012-08-26T19:33:26.840 に答える
2

引用符は使用しないでください"" 例:

$ test -d ~/.aptitude
$ echo $?
0
$ test -d "~/.aptitude"
$ echo $?
1

~引用符内で展開されません""。使用する$HOME

于 2012-08-26T19:47:55.683 に答える