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


43

現在「#」と表示されているshプロンプト(bashシェルではない)に現在のパスを表示したいので、これを導入してみました

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

そして

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

/etc/profile

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


1
それぞれ$()が個別のプログラムを実行することに注意してください。それは、環境変数、などとして使用するより高速になり$LOGNAME$HOSTNAMEそして$PWDその代わりに。
荒廃

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

必要なのは、export "PS1 =" $(whoami)@ $(hostname):$(pwd)> "を使用して、/ etc / profileを編集し、この行を最後に追加することです
SDsolar

回答:


76

二重引用符で囲まれたコマンド置換は"すぐに展開されます。それはあなたのプロンプトに必要なものではありません。単一引用符'$PS1、プロンプトを表示するときにのみ展開される置換を保持します。したがって、これは動作するはずです:

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

通常のドル記号とプロンプトの最後にスペースが$必要な場合は、最後に追加するだけです(エスケープは不要です)。export PS1='$(whoami)@$(hostname):$(pwd)$ '


1
あなたの回答で「セット」を「エクスポート」に export PS1='$(whoami)@$(hostname):$(pwd)$'変更した後、私は変更をに保存しました/etc/profile。ありがとうございました。
ブリーマー

@ブリーマー:set私のために働いた(しかし、私はネイティブを持っていませんでしたsh)。ただしexport、設定に合わせて変更します。
mpy

2
これを永続的にする方法はありますか?現在、私はログインするたびにそれをしなければなりません。ありがとう!
the.ufon 14

3
この行を/etc/profile(質問を参照)または~/.profile?!
mpy 14

ただし、これには最後に区切り文字が必要になります。であるとして、あなたのような何かを得るfoo@localhost:/home/fools -la使用しているときにls -la
フレネル

12
sh-4.2$ export PS1="\u@\h:\w>"
jenny@serenity:~>cd /usr/local
jenny@serenity:/usr/local>

1
私はbashシェルのためではないshのための作品、私はこれを行うときに私が得ることが怖い\u@\h:\w>私のコマンドのようにプロンプト
Bleamer

1
別のshバージョンである必要があります。最初の行からわかるように、sh 4.2では機能しました。
ジェニーD

1
そうかもしれません。このシェルはBusy Boxのものです。ありがとうございました。あなたの助けを感謝します。
ブリーマー

@Bleamer、それは私と一緒に動作しますBusyBox v1.19.4 built-in shell (ash)
cjm

@cjmにご連絡いただきありがとうございます。これ以上掘り下げることは避けます。
ブリーマー

5

このコマンドは私のために機能します。

export PS1="\u@\h: \W:$"

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


\ Wパラメーターの+1
Dimitry K

3

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

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

1
これは私が探していたものです。みんなが人生の色を好きになることを願っています:)
Govind Kailas

少なくとも私は。;)
Arvid

1

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

set PS1="$(pwd)" 

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

set PS1="\$(pwd)" 

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

以下を実行してテスト/理解してください:

echo $PS1

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


1

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

export PS1='$(whoami)@${HOSTNAME%%.*} [$(pwd)]# '


ありがとう!上記の他のオプションはどれも機能しませんでした。これはやった。私を夢中にさせていました。私の正気を救ってくれてありがとう。ハ!
-Lee_Str
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.