2016-07-14 1 views
0

Newbee質問ください -Javascriptをシェルスクリプトに

今でOSX/Script Editor.app can do javascriptを、どのように私はjavascriptの構文に私のAppleScript set a to (do shell script "ls")を変更できますか?

私はStandardAdditions.sdef"doShellScript method : Execute a shell script using the ‘sh’ shell"はコマンドですので、私が試した、doShellScript "ls"、および(スクリプト言語がJavaScriptに設定されているとの)スクリプトエディタに戻り、

で読んでいるものから、

"エラー-2700:スクリプトエラーです。"

答えて

0

標準付属語を使用するようにJXAスクリプトに指示する必要があります。

app = Application.currentApplication() 
app.includeStandardAdditions = true 

sourcePath = "/Applications" 

// Do not use! Unsafe path-quoting can lead to injection and unwanted behavior! See the update below for the safe version! 
app.doShellScript("ls '" + sourcePath + "'").split("\r") 

UPDATE:

app = Application.currentApplication() 
app.includeStandardAdditions = true 

sourcePath = "/Applications" 

// Safe version! 
app.doShellScript("ls '" + sourcePath.replace("'", "'\\''") + "'") 

、マイケルをお楽しみください: EDITかなり危険なパスクォート方法を使用するための@fooで手に平手打ちされた後、新しい答えはこうです/ハンブルク

+0

それをしました。ありがとうございました。 – SeniorInquisitor

+1

@Shoo:あなたの例は危ない危険です! sourcePathに単一引用符が含まれているとどうなりますか? "/ Users/jsmith/Bobのもの"? **あなたが新しいシェルスクリプトにそれらを混ぜると、あなたの入力をサニタイズする必要があります。 'doShellScript(" ls '"+ sourcePath.replace("' "、\\ ''")+ "'") 'を実行します。そうしないと、せいぜいあなたのシェルスクリプトは動かなくなります。最悪の場合、それはまったく間違ったことになります。たとえば、代わりに 'rm -rf'を使用していたら?重要なファイルがいっぱいになった「Bob」という名前の別のフォルダがあると、神はあなたを助けます。「cos-Surprise!常に衛生的、衛生的、衛生的! – foo

+0

@foo:はい、もちろんそうです、ありがとうございます!速やかに書かれた解決策は 'doShellScript'のスコープにすぎませんが、回答者は、とりわけ初心者や初心者の方にも注意してください。私は私の答えを更新します。 – ShooTerKo

関連する問題