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 '{}' ';'
csh
find
BSD拡張(最近は一般的)をサポートしていると仮定しても、-execdir
すべてのシェルで機能します。
それ実装するfileですが、現在シェルインスタンスにはrunme
ありません。source
とにかく、source
ingには実行権限は必要ありません。
とにかく、いいえ、あなたのコードは有効なcsh構文ではありません。しかし、cshの構文がまだわからない場合は、良いニュースはそれを学ぶ必要がないということです。なぜなら、人々はcshのスクリプトが有害で実行されてはならないことを少なくとも3年間知っていたからです。あなたはそれを期待する必要があります。
cshスクリプト内でcshsource
ファイルが必要で、runme
現在の作業ディレクトリが一時的にファイルの親ディレクトリである場合、コードは次のようになります。
foreach file ("`find . -name runme -type f`")
cd $file:h:q || continue
source $file:t:q
cd - || break
end
runme
ただし、パスにファイルに改行文字が含まれている場合は機能しません。