
if(-f runme ) then
cd `dirname $(find . -iname 'runme')`
chmod +x runme
source runme
cd -
これは CSH スクリプトでは本当ですか?
まず、サブディレクトリ全体で runme ファイルを再帰的に検索し、存在する場合は、このファイルが存在するサブディレクトリに移動しますか?
これが質問です - 私のロジックは構文的に正しいですか? 現在のコードは現在のディレクトリ内の runme ファイルを検索すると思います。
解決策を見つけたので、以下に共有しようと思いました。コメント欄にも書きました。
find . -name "runme" > find_runme.txt
# Just below line used to remove the file name i.e runme here from "find path", and returns only directory path.
set a = `cat find_runme.txt | sed 's/\(.*\/\).*/\1/g'`
if (-z find_runme.txt) then
cd .
else
cd $a
endif
if(-f runme ) then
# cd `dirname $(find . -iname 'runme')`
chmod +x runme
setenv PATH /dv/project/agile/xcelium/test/install/install/tools.lnx86/bin:$PATH
source runme
cd -
答え1
csh
今世紀にそれを使用する正当な理由はありません。
ただし、ここでは次のようにします。
find . -name runme -type f -execdir chmod +x '{}' ';' -execdir '{}' ';'
これは、BSD 拡張 (最近では非常に一般的) をサポートしているcsh
と仮定しても、どのシェルでも機能します。find
-execdir
それ実行するただし、ファイルを現在のシェル インスタンスにrunme
インポートするわけではありませんsource
。いずれにしても、source
を実行するには実行権限は必要ありません。
いずれにせよ、あなたのコードは有効な csh 構文ではありません。しかし、csh 構文をまだ知らない人にとっては朗報です。csh でのスクリプトは有害であり、実行すべきではないことは少なくとも 30 年間知られており、誰もあなたがそうすることを期待していないため、それを学ぶ必要はありません。
現在の作業ディレクトリが一時的にそのファイルの親であるときに、csh スクリプト内から csh ファイルを実行する必要があることが実際に判明した場合、コードは次のようになりsource
ます。runme
foreach file ("`find . -name runme -type f`")
cd $file:h:q || continue
source $file:t:q
cd - || break
end
runme
ただし、パスに改行文字が含まれるファイルがある場合は機能しないことに注意してください。