パターン①
if (-s ファイルパス) then
echo 'ファイルが存在かつファイルが空ではありません。'
本文 | /bin/mailx -s タイトル -S SMTP -r 送り元 送り先
endif
パターン②
パス -e -s `cat ファイルパス <<EOF
本文
##EOF
パターン②もファイル存在チェックとファイルの中身のからチェックをしているであっていますか?
また-sだけでもファイルがない場合もはじいてくれていますが-eしてからファイルが存在したらファイルの中身チェックで-sしようか迷っています。-sだけではまずいですか?
どちらもCshellスクリプトの体をなしていません。
cshファイルですが間違っていますか?
はい。間違ってますね。
実行してエラーの出ないコードを載せましょう。
実際に使っているのが csh なのか tcsh なのかわかりませんが、tcsh のマニュアル的には
https://linuxjm.osdn.jp/html/tcsh/man1/tcsh.1.html
> file はコマンドと展開されたファイル名で、 指定された実ユーザに対する関係があるかどうか テストします。 file が存在していない場合、 (略) すべての問い合わせは偽 (たとえば `0') を返します。
だそうなので、-s だけでもよいです。
> パス -e -s `cat ファイルパス
意図がよくわかりませんが、存在チェックと0バイトチェックなら
if ( -e パス && -s パス ) then
じゃないでしょうか。
ご回答ありがとうございます。cshファイルで冒頭に#!/bin/csh -f
をつけているのでcshだと思っています。
cshも> file はコマンドと展開されたファイル名で、 指定された実ユーザに対する関係があるかどうか テストします。 file が存在していない場合、 (略) すべての問い合わせは偽 (たとえば `0') を返します。は同じでしょうか?
csh か tcsh かは OSやディストリビューションによると理解しています。
https://ja.wikipedia.org/wiki/C_Shell
> macOS や Red Hat Linux など多くのシステムのcshは実際には改良版のtcshである。tcshの実行ファイルは "csh" と "tcsh" の両方にハードリンクされていて、どちらの名前でも同じ改良版のtcshが呼び出される。
> DebianやUbuntuではcshとtcshの2種類のパッケージを用意しており、前者はオリジナルのBSD版csh[5][6]、後者は改良版のtcsh[7][8]となっている。両方をインストールした場合、cshとしてどちらを使用するかupdate-alternativesコマンドで選択できる。
が、大昔の csh のマニュアルでも
https://man.freebsd.org/cgi/man.cgi?query=csh&apropos=0&sektion=0&manpath=2.11+BSD&arch=default&format=html
> If the file does not exist or is inaccessible then all enquiries return false, i.e. `0'.
だそうなので、csh でもそういう仕様と思われます
csh --version
を実行すれば、tcshかどうかわかります。
あなたの回答
tips
プレビュー