私はUnix環境が初めてです。クラスタの計算結果を監視する関数を使いたいです。私はこの機能を試してみましたが、それをエイリアスセクションの下の.bashrcファイルに入れました。
function tj(){
tail -100f $(find . -type f -name "*.o$1")
}
それから
tj 1234
ファイルの内容を見ると、dm.o1234
私が望むものは何もなく、実際には何も得られません(ただ>)。
エラーがどこにあるのかご存知ですか?
答え1
問題の正確な原因が何であるかはわかりませんが、コードは次のとおりです。指定されていない領土はここです。
function tj()
tj()
標準関数定義構文ではなく、Bourne / POSIX構文(使用済み)もKorn構文(使用されていないfunction tj
)()
でもありません。一部のシェル(bash、zsh、pdksh)はほとんど偶然にこれをサポートしています。tail -100f
POSIX 指定されていません。 POSIX構文はtail -f -n 100
- POSIXは
tail
最大1つの引数を受け入れます。複数の引数が渡された場合、動作は指定されません。いくつかの実装(例:GNU)はtail
複数のファイルを並列に監視できますが、他の実装はそうではありません。この目的のために設計された尾などのコマンドをインストールしてみることができます。multitail
$(find...)
Split + glob演算子が呼び出されるため、デフォルト値を使用すると、$IFS
ファイルパスにスペース、タブ、改行、またはワイルドカードが含まれている場合、操作は正しく機能しません。find
ファイルが返されない場合は、stdintail
でも終了します。
ここでzsh
コマンドを使用し、次のように定義できます。
tj() multitail ./**/*.o$1(.)
一致するファイルがない場合(tail
stdinを使用する代わりに)、エラーが報告されます。また、代わりにfind
ソートされたファイルのリストを提供し、隠しファイルまたは隠しディレクトリのファイルをスキップします(D
必要に応じてglob修飾子を追加します)。
>
編集内容によると、実行時にtj
プライマリ>
セカンダリプロンプトが()であることを確認すると、エイリアスも定義し$PS2
た可能性が高くなりますtj
(次のように定義できます)。後ろに関数定義tj
、そうでなければ関数定義エラーが発生しますtj
)。
たとえば、実行すると、次の内容が表示されます。
alias tj='for sure'
(終了していないfor
ループ)または自己完結型のコードであり、シェルはこれを完了するように促すプロンプトを表示します。
エイリアスの定義解除を使用できます(unalias tj
存在する場合は、定義からその定義を削除して、次回の実行時に再表示されないようにしてください)。~/.bashrc
bash
もちろん。*.o1234
>