現在「#」と表示されているshプロンプト(bashシェルではない)に現在のパスを表示したいので、これを導入してみました
env PS1="$(whoami)@$(hostname):$(pwd)"
そして
set PS1="$(whoami)@$(hostname):$(pwd)"
で/etc/profile
。
しかし、明らかなように、ディレクトリが変更されたりユーザーが変更されても、これは更新されません。これを動的にする方法を提案してください。
現在「#」と表示されているshプロンプト(bashシェルではない)に現在のパスを表示したいので、これを導入してみました
env PS1="$(whoami)@$(hostname):$(pwd)"
そして
set PS1="$(whoami)@$(hostname):$(pwd)"
で/etc/profile
。
しかし、明らかなように、ディレクトリが変更されたりユーザーが変更されても、これは更新されません。これを動的にする方法を提案してください。
回答:
二重引用符で囲まれたコマンド置換は"
すぐに展開されます。それはあなたのプロンプトに必要なものではありません。単一引用符'
は$PS1
、プロンプトを表示するときにのみ展開される置換を保持します。したがって、これは動作するはずです:
export PS1='$(whoami)@$(hostname):$(pwd)'
通常のドル記号とプロンプトの最後にスペースが$
必要な場合は、最後に追加するだけです(エスケープは不要です)。export PS1='$(whoami)@$(hostname):$(pwd)$ '
export PS1='$(whoami)@$(hostname):$(pwd)$'
変更した後、私は変更をに保存しました/etc/profile
。ありがとうございました。
set
私のために働いた(しかし、私はネイティブを持っていませんでしたsh
)。ただしexport
、設定に合わせて変更します。
/etc/profile
(質問を参照)または~/.profile
?!
foo@localhost:/home/fools -la
使用しているときにls -la
。
sh-4.2$ export PS1="\u@\h:\w>"
jenny@serenity:~>cd /usr/local
jenny@serenity:/usr/local>
\u@\h:\w>
私のコマンドのようにプロンプト
BusyBox v1.19.4 built-in shell (ash)
。
いくつかの色を追加してプロンプトをポン引きすることを検討するかもしれません。例えば:
export PS1='\[\e[0;36m\]\u\[\e[0m\]@\[\e[0;33m\]\h\[\e[0m\]:\[\e[0;35m\]\w\[\e[0m\]\$ '
1つの答えは、二重引用符の代わりに単一引用符を使用することでしたが、完全な正解ではありません。本当にしたいのは、プロンプトが使用されるまで、プロンプト内のコードの評価を延期することです。
set PS1="$(pwd)"
setコマンドの時点で、作業ディレクトリにプロンプトを設定します。
set PS1="\$(pwd)"
$(pwd)は展開しません。代わりに、PS1は$(pwd)のリテラル値に設定されます。
以下を実行してテスト/理解してください:
echo $PS1
。文字列:$ pwdが表示される場合、プロンプトは機能しています。リテラルパスが表示される場合、プロンプトは静的に設定されているため壊れています
$()
が個別のプログラムを実行することに注意してください。それは、環境変数、などとして使用するより高速になり$LOGNAME
、$HOSTNAME
そして$PWD
その代わりに。