ファイルが必要なサブディレクトリに移動したいですか? CSHスクリプトの使用

ファイルが必要なサブディレクトリに移動したいですか? CSHスクリプトの使用
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 '{}' ';'

cshfindBSD拡張(最近は一般的)をサポートしていると仮定しても、-execdirすべてのシェルで機能します。

それ実装するfileですが、現在シェルインスタンスにはrunmeありません。sourceとにかく、sourceingには実行権限は必要ありません。

とにかく、いいえ、あなたのコードは有効な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ただし、パスにファイルに改行文字が含まれている場合は機能しません。

関連情報