
こんにちは:) gotoコマンドを理解しようとしています。 gotoマニュアルについていくつかの質問があります。ここでオリジナルのマニュアルを見つけることができます:http://man.cat-v.org/unix-6th/1/goto
1. t̲h̲e̲S̲h̲e̲l̲l̲i̲s̲t̲a̲k̲i̲n̲g̲c̲o̲m̲m̲a̲n̲d̲s̲f̲r̲o̲m̲a̲f̲i̲l̲
下線を引いた部分はどういう意味ですか?シェルにgotoと入力できませんか?しかし、gotoをファイルに書き込むと、すべてがうまくいくでしょうか?
2. ファイルの先頭から「:」で始まり、1つ以上のスペースとラベルで始まる行を検索します。
私のファイルの一部が次のような場合
...
goto end
...
それから彼はこのような部分を見つけまし
: end
たが、私はいくつかのスクリプトを見て、それがUnix v6から来たと思います。毎回このように見えますが、
end:
正しい順序は何ですか?
三。 その行が見つかると、gotoコマンドが返されます。コマンドファイルの読み取りポインタはラベルの次の行を指すので、シェルはラベルの行に分岐します。
":"のある行に別のコマンドを書くのは正当ですか?たとえば、:end echo "Hello"
またはend: echo "Hello"
助けてくれてありがとう。楽しいクリスマスになってください:)
答え1
以下はUnixおよびV6シェルの主な機能ですgoto
。
- プロセスがフォークされると、開いているすべてのファイル記述子は親プロセスと子プロセスの間で共有されます。
- これは、すべてのプロセスによるファイル読み取り/書き込みオフセット再配置が、同じ共有ファイル記述子を持つすべてのプロセスに反映されることを意味します。
- V6シェルは、バッファリングなしで標準入力から一度に1文字ずつ読み込みます。
- V6シェルがスクリプトを実行すると、
seek
stdinからデータを読み取るか、システムコールを使用してstdinの読み取り/書き込みオフセットを移動します。 。 - シェルの
:
コマンドは(ほとんど)何もしないコマンドなので、その目的の1つはターゲットgoto
として使用されます。引数の構文エラー(および最新のシェルでは副作用を引き起こす可能性があるシェル変数の拡張)を確認する以外は何も行いません。: > file
ファイルを切り取る方法です。: end echo "hello"
何も出力されません。これらの他の例とは、:end echo "hello"
存在しない可能性のあるend: echo "hello"
コマンドを実行しようとします。:end
end:
- この
goto
コマンドは、stdinの読み取り/書き込みオフセットを0(シェルスクリプトの先頭)に設定し、stdinを読み取ることで始まる行、:
1つ以上のスペース、渡された引数、およびスペースgoto
または改行文字を検索します。一致するものが見つかったら、その行の後に読み取り/書き込みオフセットを残して終了します。ここでシェルはスクリプトの実行を再開します。
ここでソースを見ることができますgoto
:http://minnie.tuhs.org/cgi-bin/utree.pl?file=V6/usr/source/s1/goto.c
頼む
シェルにgotoと入力できませんか?
あなたはできます。このgoto
コマンドは stdin が端末から来ていることを確認し、そうであればエラーメッセージを作成して終了します。