発端は「% と $ と > のどれが正統か」という疑問

つまり「UNIX のシェルプロンプトで一般ユーザーを表す記号」で正統なのは何か? オリジナルのシェルプロンプトはどうだったのか? という考古学的な疑問。

結論から書くと、MacPorts で osh を入れてみた。

% sudo port install osh

あっけない。

"here are some example rc files which may help the user wishing to use osh interactively to better understand how to configure the shell and its environment." とのことで examples/ のファイルも全部ほしくなったので git clone いっぱつですべてゲットした。

% git clone https://github.com/JNeitzel/v6shell.git

https://github.com/JNeitzel/v6shell.git

以下は補足説明です。

UNIX V6 /usr/source/s2/sh.c
= V6 shell
= Thompson shell

V6/usr/source/s2/sh.c
http://minnie.tuhs.org/cgi-bin/utree.pl?file=V6/usr/source/s2/sh.c

sh.c - original source code for the Sixth Edition (V6) UNIX Thompson shell
http://v6shell.org/history/sh.c

The osh project (port of V6 Thompson shell)
http://v6shell.org/

osh は BSD 4姉妹向けがさくっと用意されている。

Osh is also included
as shells/osh in FreeBSD Ports,
as shells/osh in MacPorts,
as shells/osh in NetBSD pkgsrc,
and as shells/osh in OpenBSD Ports.

MacOSX は MacPorts であっけなくインストールできてしまった。 ちなみに MacOSX ユーザーで BSD 系の人は MacPorts を使います。由緒。それが筋というものです。

[air:~] % sudo port install osh    
Password:
--->  Fetching archive for osh
--->  Attempting to fetch osh-20160108_0.darwin_12.x86_64.tbz2
--->  Attempting to fetch osh-20160108_0.darwin_12.x86_64.tbz2.rmd160
--->  Installing osh @20160108_0
--->  Activating osh @20160108_0
--->  Cleaning osh
--->  Updating database of binaries
--->  Scanning binaries for linking errors
--->  No broken files found. 
[air:~] % which osh
/opt/local/bin/osh
[air:~] % osh
% 

%

WOW! やはりUNIX V6シェル/トンプソンシェルは % ですか。 UNIX V7シェル/ボーンシェルで $ になったわけですね。 その後 csh/tcsh で > になった。 その後のボーンアゲインシェルでは当然 $ になる。 で、FreeBSD の csh は /etc/csh.cshrc で set promptchars = "%#" されてます。 これでシステムワイドに一般ユーザーを % にしている。 csh/tcsh は > だけれども UNIX のシェルとしてオリジナルで由緒ある % に戻しているということみたい。 生粋の UNIX ユーザーは % に思い入れがあるでしょうから。 やっぱ % じゃないと UNIX の雰囲気でないよねという、 文化的な思い入れを大事にしてるわけですね。

man csh

prompt

Set by default to `%# ' in interactive shells.

  prompt formatting sequence

  %#
    `>'  (or the first character of the promptchars shell vari-
    able) for normal users, `#' (or  the  second  character  of
    promptchars) for the superuser.

promptchars (+)

If  set  (to  a  two-character  string),  the  `%#'  formatting
sequence  in  the  prompt  shell  variable is replaced with the
first character for normal users and the second  character  for
the superuser.
なぜ BSD の tcsh では

set promptchars = '%#'

がお約束なの?
Q: BSD 系 UNIX の tcsh はなぜ一般ユーザーが % なの?
   スーパーユーザーが # であることはおいといて。

A: 考古学的に辿れる最古の UNIX の
   一般ユーザーのプロンプトが % だったから。
   その伝統をリスペクトしているわけ。
   BSD 系の人にとって
   プロンプトが $ というのは
   Linux みたいでイヤだし
   > というのもなんだかな〜
   テンション下がるのです。
   bash = Linux という系統と
   tcsh = BSD という系統
   という派閥の話とか記号論になってきます。
   BSD 系の人でも tcsh から bash に乗り換えた人が
   プロンプトを $ にするのはありえます。
   $ を見れば bash を使っているんだと
   思えるからです。
   bash なのに % というのはへんなわけです。
   zsh に乗り換えたらプロンプトをどうするか。
   これは議論になります。
   zsh のデフォルトプロンプトは % です。
   そして zsh とは何かという話になっていきます。

http://minnie.tuhs.org/cgi-bin/utree.pl

http://superuser.com/questions/57575/what-is-the-origin-of-the-unix-dollar-prompt

topic: macosx
first posted: 2016-01-26 11:01:50
last modified: 2016-02-05 10:16:04