シェルで「< ./somefile.txt」を実行するとどうなりますか?

シェルで「< ./somefile.txt」を実行するとどうなりますか?

だから私は< ./somefile.txtシェルで実行していましたが、何もしませんでした(テキストファイルには有効なLinuxコマンドがありました)。では、テキストファイルの内容はどこにリダイレクトされますか?私はそれがnullだと推測していますが、わかりません。

オペレーティングシステム:Ubuntu 12.04

ベストアンサー1

だから私はちょうどLinuxシェルで "< ./somefile.txt"を実行しました。

bashと同様のシェルではdashありません実装する注文。それはただ分配する somefile.txt標準入力として。コマンドを指定しないと、stdinは使用されないため、何もしません。

stdinで作業を行うには、以下を試してくださいcat

cat <./somefile.txt

標準入力が標準出力に反映されるため、cat端末にファイルが表示されることがわかります。

一方、実際にスクリプトを実行するには、次のようにサブシェルで実行できます。

bash ./somefile.txt

または(a)somefile.txtに実行可能なビットセット()があり、chmod +x somfile.txt(b)が完全にsh互換性がある場合、または最初の行に適切なshebang(たとえば#!/bin/bash)がある場合は、次のようにします。

./somefile.txt

または現在のシェル(つまりそれを得るために)以下を実行してください:

. ./somefile.txt

または:

source ./somefile.txt

通常、現在の作業ディレクトリと現在のシェル環境の他の側面を変更したい場合は、スクリプトを取得します。そのような副作用がない場合は、それをサブシェルで実行しないでください。

高度な使い方

<./somefile.txt@StéphaneChazelasは、これがファイルを読み取ることができるかどうかをテストするのに./somefile.txt役立つと指摘しました。たとえば./somefile.txt、読み取れない場合はコード 1 で終了します。

<./somefile.txt || exit 2

これは、シェルが./somefile.txt読み取り可能なstdinにのみ割り当てることができるために機能します。それ以外の場合、シェルはエラーメッセージを表示し、コード1を返します。このコードは "or()句をトリガします。||この場合、スクリプトはコード2で終了します。同じテストでは、次のようになります。

[ -r "./somefile.txt" ]  || exit 2

おすすめ記事