だから私は< ./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