Hur få in Applescriptvariabel i ett shellscript?

Tråden skapades och har fått 15 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • 2008-03-25 12:19

Jag skulle vilja göra en "cat" men peta in två variabler jag tar fram med applescript. Hur gör man det? Typ:

set myFirstText to ...
set mysecondText to ...
do shell script "cat myFirstText > mySecondText"
  • Medlem
  • 2008-03-25 13:15
  • Medlem
  • International user
  • 2008-03-28 15:34
do shell script "cat " & myFirstText & " > " & mySecondText

För att vara säker på att filnamn och mappnam blir kompletta om det t.ex. innehåller mellanslag bör man "eskejpa" dessa:

do shell script "cat " & "\"" & myFirstText & "\""  & " > " & "\"" & mySecondText & "\""
  • Medlem
  • 2008-03-28 16:00

Tackar tackar!

Wire har på ett sätt rätt, men det finns en ännu bättre lösning och det är att använda det som heter:

quoted form of "/någon posix-sökväg/till en fil.txt"

Anledningen till att det är bättre är att om filnamnet skulle råka innehålla citattecken så funkar det inte att bara lägga till egna, för då blir antalet tecken fel mm. Vad quoted form of-kommandot gör är att det kontrollerar hela strängen och lägger till ev "escaping" även för citattecken mm inne i strängen.

  • Medlem
  • 2008-03-29 08:26

Det minns jag faktiskt från din kurs. Men jag tänkte vänta med att skriva det tills jag hade fått mitt lilla skript att fungera (vilket jag alltså inte har...)

  • Medlem
  • 2009-05-04 10:48

Ok, vad gör jag för fel här:

tell application "Finder"
	set myDate to (time string of (current date))
	set mySourceFolder to POSIX path of mySourceFolder
	set mySourceTxt to mySourceFolder & "*txt"
	set mySourceTxt to quoted form of mySourceTxt

	set myResult to mySourceFolder & myDate & ".txt"
	set myResult to quoted form of myResult

	do shell script "cat mySourceTxt > myResult"
end tell

Du använder variabelns namn innanför citationstecken, vilket gör att det bara blir en textfnutt, istället för det som variablen innehåller.

Såhär ska det se ut

do shell script "cat " & mySourceTxt & "> myResult"

Ett bra tips när man ska jobba med "do shell script" är att man bygger upp hela kommandot som en sträng innan, såhär

set myCommand to "cat " & mySourceTxt & "> myResult"

och sedan kör:

do shell script myCommand

  • Medlem
  • 2009-05-04 12:02
Ursprungligen av Richard Rönnbäck:

Du använder variabelns namn innanför citationstecken, vilket gör att det bara blir en textfnutt, istället för det som variablen innehåller.

Såhär ska det se ut

do shell script "cat " & mySourceTxt & "> myResult"

Ett bra tips när man ska jobba med "do shell script" är att man bygger upp hela kommandot som en sträng innan, såhär

set myCommand to "cat " & mySourceTxt & "> myResult"

och sedan kör:

do shell script myCommand

aha, nu plingar det till.

  • Medlem
  • 2009-05-04 15:03
Ursprungligen av Richard Rönnbäck:

Såhär ska det se ut

do shell script "cat " & mySourceTxt & "> myResult"

Mja...

Ursprungligen av Script Debugger:

Finder got an error: cat: /Users/spljl2/Desktop/test/*txt: No such file or directory

Oh, and btw, det är ofantligt mycket långsammare att gå via "do shell script" för att läsa en fil, istället för att bara använda AS read-kommando, dvs.

read file "Macintosh HD:mintextfil.txt"

  • Medlem
  • 2009-05-04 12:01
Ursprungligen av Richard Rönnbäck:

Oh, and btw, det är ofantligt mycket långsammare att gå via "do shell script" för att läsa en fil, istället för att bara använda AS read-kommando, dvs.

read file "Macintosh HD:mintextfil.txt"

Jag ska läsa 90-100 filer. Är AS bättre även då?

Jaså, jag tog visst fel variabel, för du ska väl ha den där du har en tidssträng med eller? Såhär:

do shell script "cat " & myResult & "> myResult"

Eller vill du läsa in alla filerna på en gång, dvs slå samman dem?

  • Medlem
  • 2009-05-05 09:16
Ursprungligen av Richard Rönnbäck:

Eller vill du läsa in alla filerna på en gång, dvs slå samman dem?

Just prexis! Jag vill peka ut en mapp med ett antal textfiler, slå ihop alla textfiler till en ny i samma mapp och kalla den typ (myDate & ".txt")

Jag har inga problem med att slå ihop filerna med cat, men jag då måste jag hårdkoda sökvägen.

Ok, då måste man ta till en lite annan metod. Vi har att göra med vad som kallas "expansion", vilket har att göra med hur * tolkas.

Det enklaste sättet är att du skickar två shell kommandon i samma "do shell script"-anrop, då separerar man dem med ett semikolon. Först byter man katalog till den man vill hitta alla textfiler i, och sen låter man wildcard-tecknet göra sitt jobb. Såhär ska det se ut:

set myCommand to "cd " & quoted form of "/Users/richardr/Desktop/test/" & "; cat *.txt"

do shell script myCommand

På det sättet hanterar man dels knepiga sökvägar med eventuella mellanslag och/eller citattecken i sig, samtidigt som man får listan med filer

Vill du kan du byta ut "cat" mot t.ex. "sort" om du vill ha raderna sorterade

  • Medlem
  • 2009-05-05 10:43

Eller så gör jag det med applescript från början till slut. Tack!

1
Bevaka tråden