web-dev-qa-db-ja.com

Linux sh(bashではない)のコマンドプロンプトで現在のパスを表示するにはどうすればいいですか?

Shプロンプト(bashシェルではありません)に現在のパスを表示したいのですが、現在は "#"しか表示されていません。

env PS1="$(whoami)@$(hostname):$(pwd)"

そして

set PS1="$(whoami)@$(hostname):$(pwd)"

/etc/profileにあります。

しかし明らかなように、ディレクトリが変更されたりユーザーが変更されたりしても、これは更新されません。これをダイナミックにする方法を提案してください。

40
Bleamer

二重引用符"内のコマンド置換はすぐに展開されます。それはあなたがあなたのプロンプトに望むものではありません。一重引用符'は、$PS1内の置換を保存し、プロンプトの表示時にのみ展開されます。したがって、これはうまくいくはずです。

export PS1='$(whoami)@$(hostname):$(pwd)'

プロンプトの最後に通常のドル記号とスペースを入れたい場合は、最後に$を追加します(エスケープする必要はありません)。export PS1='$(whoami)@$(hostname):$(pwd)$ '

73
mpy
sh-4.2$ export PS1="\[email protected]\h:\w>"
[email protected]:~>cd /usr/local
[email protected]:/usr/local>
12
Jenny D

このコマンドは私には役に立ちます。

export PS1="\[email protected]\h: \W:$"

どこで
\ u =ユーザー名
\ h =ホスト名
\ W現在のフォルダ名(フルパスではありません)

4
rangsiman

いくつかの色を追加することによってプロンプトをポン引きすることを検討するかもしれません。例えば:

export PS1='\[\e[0;36m\]\u\[\e[0m\]@\[\e[0;33m\]\h\[\e[0m\]:\[\e[0;35m\]\w\[\e[0m\]\$ '
1
Arvid

1つの答えは、二重引用符の代わりに一重引用符を使用することでしたが、それは完全に正しい答えではありません。あなたが本当にやりたいことは、プロンプトが使われるまであなたのプロンプトの中のコードの評価を延期することです。

set PS1="$(pwd)" 

setコマンドの時点で、プロンプトを作業ディレクトリに設定します。

set PS1="\$(pwd)" 

$(pwd)を展開しません。代わりに、PS1は$(pwd)のリテラル値に設定されています。

次のコマンドを実行してこれをテスト/理解します。

echo $PS1

。文字列$ pwdが表示されたら、プロンプトは機能します。リテラルパスが表示されている場合は、プロンプトが静的に設定されているためにプロンプ​​トが壊れています。

1
MaasSql

下記のコマンドを使用して、cpanelのように設定します。

'PS1='$(whoami)@${HOSTNAME%%.*} [$(pwd)]#'をエクスポートします。

1
Milan