# grepは外部コマンドです。 grep -n hoge *.c | wc |
このことを知って使う分には便利なんですが、知らないとすべてTclのコマンドだと
錯覚してしまい、スクリプトを他のプラットフォームに移植した時に問題になることがあります。
外部コマンドの実行を禁止するには、auto_noexec変数を作成します。
Tclは、auto_noexec変数が存在すると、外部コマンドを実行せずにエラーを返します。
# 変数の値はなんでも良い。 set auto_noexec 1 grep -n hoge *.c | wc invalid command name "grep" |
# grepは外部コマンドです。 exec grep -n hoge *.c | wc |
外部コマンドは、UNIXのShellで実行する時のように、標準入出力のリダイレクトやパイプラインに対応しています。
また、globコマンドの正規表現を使ってファイル名を指定することもできます。
-keepnewline | コマンド出力のニューラインを削除しません。第1引数に指定する。 |
-- | オプションの最後を表します。 |
| | コマンドの標準出力をパイプラインでつなぎます。 |
|& | コマンドの標準出力と標準エラー出力をパイプラインでつなぎます。 |
< fileName | 指定したファイルから入力します。 |
<@ fileId | 指定したファイルストリームから入力します。 |
<< value | 指定した文字列を入力します。 |
> fileName | 標準出力を指定したファイルに出力します。 |
2> fileName | 標準エラー出力を指定したファイルに出力します。 |
>& fileName | 標準出力と標準エラー出力を指定したファイルに出力します。 |
>> fileName | 標準出力を指定したファイルに追記します。 |
2>> fileName | 標準エラー出力を指定したファイルに追記します。 |
>>& fileName | 標準出力と標準エラー出力を指定したファイルに追記します。 |
>@ fileId | 標準出力を指定したファイルストリームに出力します。 |
2>@ fileId | 標準エラー出力を指定したファイルストリームに出力します。 |
>&@ fileId | 標準出力と標準エラー出力を指定したファイルストリームに出力します。 |
& | コマンドをバックグランドで実行します。コマンドの最後に指定する。 |
execコマンドの構文の使用例です。
grep -n hoge *.c | wc >& log.txt & exec grep -n hoge *.c | wc >& log.txt & |
Windows環境では、ファイルの拡張子にアプリケーションがバインドされているので、
それを応用すると、Webブラウザを立ち上げてHTMLファイルを開くのも簡単にできます。
# CMD.COM経由でWebブラウザを起動する。 exec $env(COMSPEC) /c start index.html & |
注意としては、一部のWindowsの版で問題になるので、
HTMLファイル名のパスは、file nativenameコマンドを使ってWindowsネーティブパス(\でセパレート)に変換して渡した方が安全です。