「コマンドラインシェル」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎入出力: シェルパイプラインの説明を翻訳)
(→‎デフォルトシェルを変更する: 3章「Login shell」を転載)
76行目: 76行目:
   
 
上記コマンドを実行してからログアウト・ログインすると、指定したシェルが開くはずです。
 
上記コマンドを実行してからログアウト・ログインすると、指定したシェルが開くはずです。
  +
  +
== Login shell ==
  +
  +
A ''login shell'' is an invocation mode, in which the shell reads files intended for one-time initialization, such as system-wide {{ic|/etc/profile}} or the user's {{ic|~/.profile}} or other shell-specific file(s). These files set up the initial environment, which is inherited by all other processes started from the shell (including other non-login shells or graphical programs). Hence, they are read only once at the beginning of a session, which is, for example, when the user logs in to the console or via [[SSH]], changes the user with [[sudo]] or [[su]] using the {{ic|--login}} parameter, or when the user manually invokes a login shell (e.g. by {{ic|bash --login}}).
  +
  +
See [[#Configuration files]] and the links therein for an overview of the various initialization files. For more information about login shell, see also [https://unix.stackexchange.com/q/38175 Difference between Login Shell and Non-Login Shell?] and [https://unix.stackexchange.com/q/324359 Why a "login" shell over a "non-login" shell?] on Stackexchange.
   
 
== 設定ファイル ==
 
== 設定ファイル ==

2020年7月29日 (水) 09:24時点における版

関連記事

Wikipedia より:

Unix シェルは、UNIX オペレーティングシステムおよび Unix 系システムの従来からのユーザインタフェースを提供するコマンドラインインタプリタまたはシェルである。コマンドラインインタプリタに文字列の形でコマンドを入力することでコンピュータを直接操作したり、そのようなコマンドを並べたスクリプトを書いて実行させたりするのに使われる。

シェル一覧

シェル 補完 & 履歴 POSIX 準拠
Bash Yes Yes (--posix)
C shell Yes No
DASH No Yes
fish Yes No
mksh Yes Yes (-o posix)
rc No No
zsh Yes Yes (--emulate sh)

POSIX準拠

  • Bash — GNU のオペレーティングシステムで使われるシェル、もしくはコマンド言語インタプリタ。Bash は Korn shell (ksh) や C shell (csh) から便利な機能を集めた sh 互換のシェルです。IEEE POSIX P1003.2/ISO 9945.2 Shell and Tools 標準を満たすことを目的にしています。プログラミングとインタラクティブ、両面で sh よりも機能的な改善がなされています。さらに、Bash では sh スクリプトのほとんどを修正を加えずに動かすことが可能です。
https://www.gnu.org/software/bash/ || bash
  • DASH — 可能な限り小さくなるように作られた POSIX 互換の /bin/sh の実装です。なるべく速度を犠牲にしないように作られています。実際に、ほとんどの処理で Bash (GNU Bourne-Again SHell) よりも高速に動きます。
http://gondor.apana.org.au/~herbert/dash/ || dash
  • Korn shell — KornShell 言語は AT&T ベル研究所の David G. Korn によって設計・開発されました。様々なコンピューター・ワークステーションから UNIX などのシステムにアクセスすることができるインタラクティブなコマンド言語です。また、KornShell 言語はアプリケーションを書くのに使える完全でパワフルな高級プログラミング言語でもあり、多くの場合、他の高級言語よりも簡単で高速です。このため特にプロトタイピングに適しています。他に広く使われているシェルとして、AT&T ベル研究所の Steven Bourne によって開発された Bourne シェルと、カリフォルニア大学の Bill Joy によって開発された C シェルという2つのシェルがあります。ksh はその2つのシェルの一番良い所を取り、新しい機能を数多く追加しました。そのため、システムとの対話とプログラミングの両方で ksh はあなたの作業の生産性と質を高めることができます。ksh のプログラムは簡単に書くことができ、C などの低級言語で書かれたプログラムよりも簡潔で読みやすいものになります。
http://www.kornshell.com || 記事を参照
  • Zsh — インタラクティブな利用のために作られたシェルですが、パワフルなスクリプト言語でもあります。Bash, ksh, tcsh の便利な機能の多くが Zsh に組み入れられており、オリジナルの機能も多数追加されています。入門ドキュメント に Zsh のユニークな機能の説明があります。
http://www.zsh.org/ || zsh

代替シェル

  • C shell — 対話式のログインシェルとしてもシェル言語コマンドプロセッサとしても使うことが出来るコマンド言語インタプリタ。コマンドラインエディタ、プログラマブルな単語補完、スペル訂正、履歴機構、ジョブ操作、C ライクな構文を持っています。
http://www.tcsh.org || tcsh
  • Elvish — 近代的かつ表現豊かなシェルで、内部構造の値をパイプラインで渡すことができます。この機能によって複雑なテキスト処理のコードを書かなくてすみます。表現的なプログラミング言語を備えており、例外・名前空間・匿名関数などが使えます。タイピング中に構文をチェックする強力な readline を装備しており、デフォルトでシンタックスハイライトが効きます。
https://elvish.io || elvishAUR
  • fish — スマートでユーザーフレンドリなコマンドラインシェル。OS X や Linux などに対応。Fish にはフルカラーのコマンドライン・シンタックスハイライトがあり、コマンドとその引数、既存のファイルや履歴のハイライトそして補完をすることができます。履歴やコマンドの補完候補の表示もサポート。Fish はシステムの man ページを解析してコマンドの正しい引数を調べることにより、コマンドのハイライトと補完を可能にしています。Alt-Up を使うことで最後に実行したコマンドの変更を簡単に行うことが出来ます。fish デーモン (fishd) は fish の全てのインスタンス間で、履歴や環境変数を同期します。
http://fishshell.com/ || fish
  • Nash — Plan 9 の rc の影響を受けているシステムシェル。オペレーティングシステム (Linux や Plan 9) の名前空間を活用して読みやすく安全なスクリプトを簡単に作成できます。
https://github.com/NeowayLabs/nash || nash-gitAUR
  • Oh — Go で書かれた Unix シェル。他の Unix シェルと同じような精神を持っていますが細かい所は異なっています。Oh はシェルの対話機能を犠牲にすることなくシェルのプログラミング言語機能を拡張しています。
https://github.com/michaelmacinnis/oh || oh-gitAUR
  • Powershell — PowerShell は元は Windows 専用に作られた、オブジェクト指向言語でありインタラクティブなコマンドラインシェルです。後になって、オープンソース化されて macOS や Linux に移植されました。
https://github.com/PowerShell/PowerShell || powershellAUR
  • rc — Plan 9 のコマンドインタプリタで UNIX の Bourne シェルと同じような機能を提供します。細かい追加がなされ構文はもっと一般的になっています。
http://plan9.bell-labs.com/sys/doc/rc.html || 9base
  • xonsh — python インタプリタがベースの後方互換なシェル。
http://xon.sh/ || xonsh

デフォルトシェルを変更する

上記のシェルをインストールした後、実行ファイルを起動すると、今使っているシェルの中でインストールしたシェルが起動します。ログイン時にインストールしたシェルが起動するようにしたい場合、デフォルトシェルを変更する必要があります。

インストールされているシェルを確認するには、次を実行:

$ chsh -l

デフォルトシェルを設定するには次を実行 (chsh -l で確認できる、フルパスを指定するようにしてください):

$ chsh -s full-path-to-shell

上記コマンドを実行してからログアウト・ログインすると、指定したシェルが開くはずです。

Login shell

A login shell is an invocation mode, in which the shell reads files intended for one-time initialization, such as system-wide /etc/profile or the user's ~/.profile or other shell-specific file(s). These files set up the initial environment, which is inherited by all other processes started from the shell (including other non-login shells or graphical programs). Hence, they are read only once at the beginning of a session, which is, for example, when the user logs in to the console or via SSH, changes the user with sudo or su using the --login parameter, or when the user manually invokes a login shell (e.g. by bash --login).

See #Configuration files and the links therein for an overview of the various initialization files. For more information about login shell, see also Difference between Login Shell and Non-Login Shell? and Why a "login" shell over a "non-login" shell? on Stackexchange.

設定ファイル

ログイン時にコンソールでプログラムを自動起動させたい場合、シェルのスタートアップファイル・ディレクトリを使用することができます。シェルのドキュメントや ArchWiki の記事を見てください (例: Bash#設定ファイルZsh#設定ファイル)。

Wikipedia:Unix shell#Configuration files も参照。

/etc/profile

ログイン時に Bourne 互換のシェルは /etc/profile を読み込み、それから /etc/profile.d/*.sh ファイルを全て読み込みます。これらのスクリプトはインタプリタのディレクティブを必要とせず、実行可能属性を付与する必要もありません。環境やアプリケーション個別の設定を定義するのに使用します。

入出力

GregsWikiI/O Redirection を参照。

  • リダイレクトは、コマンドが実行される前にファイルを切りすてます:
    command file > file
    したがって、期待通りには動作しません。一部のコマンド(例えばsed)は、ファイルをその場で編集するオプションを提供しますが、多くの場合は提供されません。このような場合は、moreutils パッケージの sponge(1) コマンドを使用します。
  • Because cat is not built into the shell, on many occasions you may find it more convenient to use a redirection, for example in scripts, or if you care a lot about performance. In fact < file does the same as cat file.
$ cat << EOF
one
two
three
EOF
  • シェルパイプラインは、デフォルトでは stdout で動作します。stderr(3) で動作させるには、command 2>&1 |othercommand のように strerr から strout に リダイレクトします。Bash 4 の場合は、command |& othercommand となります。
  • 多くの GNU Core Utilities はファイルを引数として受けとる事を思いだしてください。例えば、grep pattern < filegrep pattern file と置きかえられます。

参照