1

paramを受け取り、JS Lintを介して実行し、結果をデスクトップ上のファイルに出力するbash関数があります。これは、実行時にJSファイルのディレクトリにいる限り機能します。ただし、関数にパスを渡すと、パスがチョークします。jslintは私の関数の名前です。例:

# This works
$ jslint script.js

# This doesn't work
$ jslint ~/dev/project/js/script.js

# Neither does this
$ jslint /Users/Jesse/dev/project/js/script.js

私の関数では、できれば正規表現を使用して出力するときに、$1を取得してパスを削除する必要があります。以下の私の関数を参照してください。

function jslint {
    /usr/local/bin/node /usr/share/node-jslint/node_modules/jslint/bin/jslint.js $1 > "~/Desktop/" + $1 + "-lint.txt"
}

これは、私が取り組んでいて実行しようとしたプロジェクトのエラーの例です。

-bash: /Users/Jesse/Desktop/Dropbox/dev/ourcityourstory.com/js/script.js-lint.txt: No such file or directory

4

2 に答える 2

2

正規表現は必要ありません。Bashは、プレフィックス/サフィックスをトリミングするための単純なグロブパターンをサポートしています。これは、変数から${1##*/}最後まですべてをトリミングする、を使用して実行できます。/

具体的には、次の4つのバリエーションがあります。

  1. ${var#pat}patグロブとして扱い、から最も短い一致するプレフィックスを削除しvarます。

  2. ${var##pat}グロブとして扱いpat、最長一致プレフィックスをからトリミングしvarます。

  3. ${var%pat}グロブとして扱いpat、から最も短い一致するサフィックスをトリミングしvarます。

  4. ${var%%pat}グロブとして扱いpat、最も長く一致するサフィックスをからトリミングしvarます。

あなたの特定のケースでは、おそらく言いたいでしょう

function jslint {
    /usr/local/bin/node /usr/share/node-jslint/node_modules/jslint/bin/jslint.js "$1" > "~/Desktop/" + "${1##*/}" + "-lint.txt"
}

(パスにスペースが含まれている場合に必要な変数も引用しました)

于 2013-03-25T21:48:25.690 に答える
1

--の代わりに、ファイルパスパラメータの最後の「/」から文字列を出力するのはregexどうでしょうか。basename

e.g. basename /usr/include/stdio.h  --> stdio.h
于 2013-03-25T21:47:51.333 に答える