Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 是否将变量结果保存到tmp文件中,以便以后调用?_Macos_Bash_Variables_Find_Temporary Files - Fatal编程技术网

Macos 是否将变量结果保存到tmp文件中,以便以后调用?

Macos 是否将变量结果保存到tmp文件中,以便以后调用?,macos,bash,variables,find,temporary-files,Macos,Bash,Variables,Find,Temporary Files,运行一个脚本,找到一手文件并将其目录设置为变量。我使用这个脚本提示用户输入osascript对话框,然后调用与用户输入相似的文件 一切正常。唯一的问题是,当我运行脚本时,加载对话框似乎需要10-15秒。如果我在第一次之后再次运行它,它将在2-4秒内加载 问题是: 有没有办法更快地加载“查找”变量的结果?可能让它将结果存储在tmp文件夹中,以便下次运行时,它可以只搜索txt文件,并将其中的文件目录放入变量中。。。(因此,除非他们已经搬家,否则我需要做一个If-Else语句?) 嗯,我找到了我的答案

运行一个脚本,找到一手文件并将其目录设置为变量。我使用这个脚本提示用户输入osascript对话框,然后调用与用户输入相似的文件

一切正常。唯一的问题是,当我运行脚本时,加载对话框似乎需要10-15秒。如果我在第一次之后再次运行它,它将在2-4秒内加载

问题是:

有没有办法更快地加载“查找”变量的结果?可能让它将结果存储在tmp文件夹中,以便下次运行时,它可以只搜索txt文件,并将其中的文件目录放入变量中。。。(因此,除非他们已经搬家,否则我需要做一个If-Else语句?)


嗯,我找到了我的答案,看来
source
可以解决这个问题。为了使下面的脚本有意义,将通过在应用程序中进行编译

如果有任何压缩,请分享

#!/bin/sh

## READ LOCAL DIR
## CHANGE BACK-SLASH TO COLON (USE FOR VARIABLE IN OSASCRIPT)
dir=$(pwd)
dir=${dir//\//:}

## REPAIR AND RELOCATE FILE FUNCTION
## RUN FUNCTION ON FIRST LOAD AND WHEN USER INPUTS [repair]
## STORES VARIABLES IN TMP FOLDER TO BE CALLED LATER
function repaird() {    
    abd="$(find ~/ -name "FILE 1")" 
    cbd="$(find ~/ -name "FILE 2")"
    csd="$(find ~/ -name "FILE 3")"
    sad="$(find ~/ -name "FILE 4")"
    app="$(find ~/ -name "FILE.app")"  
    echo "#!/bin/sh" > /tmp/VAR_LIST.sh    ##CREATE .SH FILE TO STORE VARIABLES
    echo "" >> /tmp/VAR_LIST.sh
    echo "abd='$abd'" >> /tmp/VAR_LIST.sh
    echo "cbd='$cbd'" >> /tmp/VAR_LIST.sh
    echo "csd='$csd'" >> /tmp/VAR_LIST.sh
    echo "sad='$sad'" >> /tmp/VAR_LIST.sh
    cd /tmp
    chmod +x VAR_LIST.sh; }                

## CHECK IF VAR_LIST FILE EXIST
## IF NOT THEN PROCEED TO FIND FILES AND SAVE VARIABLES TO VAR_LIST

if ls /tmp/VAR_LIST.sh* 1> /dev/null 2>&1; then
    source /tmp/VAR_LIST.sh         ## USE SOURCE TO CALL OUR VAR_LIST 
else
    repaird
fi

## USE OSASCRIPT TO CALL DIALOG BOX WITH USER INPUT    

WORKOUT="$(osascript -e 'Tell application "System Events" to display dialog "Please enter your workout code:" & "\n[ab] = Ab" & "\n[cb] = Cb" & "\n[cs] = Cs" & "\n[sa] = Sa" & "\n[repair] = Repair Directory" with icon file "'$dir:appIcon.icns'" with title "MY_TITLE" buttons {"Cancel", "Ok"} default button 2 default answer ""' -e 'text returned of result' 2>/dev/null)"

## SEE IF USERS INPUT MATCHES ANY OF THE OPTIONS BELOW
## IF NOT THEN EXIT SCRIPT

if [ "$WORKOUT" = "ab" ] 
then 
  open "$abd"; afplay ohyeah.mp3

elif [ "$WORKOUT" = "cb" ] 
then
  open "$cbd"; afplay ohyeah.mp3

elif [ "$WORKOUT" = "cs" ] 
then
  open "$csd"; afplay ohyeah.mp3

elif [ "$WORKOUT" = "sa" ] 
then
  open "$sad"; afplay ohyeah.mp3

elif [ "$WORKOUT" = "repair" ]       ## REPAIR WILL DO THE FOLLOWING
then
  rm /tmp/VAR_LIST.sh             ## RM CURRENT VAR_LIST
  repaird                        ## RUN FUNCTION <REPAIRD>
  sleep 5; open "$app" &         ## DELAY 5 SECONDS THEN OPEN SCRIPT AS BACKGROUND
  close "$app"                   ## CLOSE SCRIPT  
else                             ## SCRIPT OPENS AFTER 5 SECONDS WHICH PROMPTS
  exit                           ## USER WITH SAME 

fi
#/垃圾箱/垃圾箱
##读取本地目录
##将反斜杠更改为冒号(用于脚本中的变量)
dir=$(pwd)
dir=${dir/\/:}
##修复和重新定位文件功能
##在首次加载和用户输入时运行功能[修复]
##将变量存储在TMP文件夹中,以便以后调用
函数d(){
abd=“$(查找~/-name“文件1”)”
cbd=“$(查找~/-name“文件2”)”
csd=“$(查找~/-name”文件3”)
sad=“$(查找~/-name”文件4”)”
app=“$(查找~/-name”FILE.app”)“
echo“#!/bin/sh”>/tmp/VAR_LIST.sh##CREATE.sh文件以存储变量
echo”“>>/tmp/VAR_LIST.sh
echo“abd='$abd'>>/tmp/VAR_LIST.sh
echo“cbd='$cbd'>>/tmp/VAR_LIST.sh
echo“csd='$csd'>>/tmp/VAR_LIST.sh
echo“sad='$sad'>>/tmp/VAR_LIST.sh
cd/tmp
chmod+x VAR_LIST.sh;}
##检查VAR_列表文件是否存在
##如果没有,则继续查找文件并将变量保存到VAR_列表
如果ls/tmp/VAR_LIST.sh*1>/dev/null 2>&1;然后
source/tmp/VAR_LIST.sh##使用source调用我们的VAR_LIST
其他的
修复
fi
##使用OSASCRIPT调用带有用户输入的对话框
训练=“$(osascript-e”告诉应用程序“系统事件”以显示对话框”请输入你的训练代码:&“\n[ab]=ab”&“\n[cb]=cb”&“\n[cs]=cs”&“\n[sa]=sa”&“\n[repair]=repair Directory”,图标文件“$dir:appIcon.icns”,标题为“我的标题”按钮{“取消”,“确定”}默认按钮2默认答案”“'-e'返回的结果“2>/dev/null”文本”
##查看用户输入是否与以下任何选项匹配
##如果没有,则退出脚本
如果[“$训练”=“ab”]
然后
打开“$abd”afplay ohyeah.mp3
elif[“$COUNT”=“cb”]
然后
打开“$cbd”afplay ohyeah.mp3
elif[“$COUNT”=“cs”]
然后
打开“$csd”afplay ohyeah.mp3
elif[“$COUNT”=“sa”]
然后
打开“$sad”afplay ohyesh.mp3
elif[“$WORKOUT”=“repair”]##repair将执行以下操作
然后
rm/tmp/VAR_LIST.sh##rm当前VAR_LIST
已修复的##运行功能
睡眠5;打开“$app”&##延迟5秒,然后打开脚本作为背景
关闭“$app”##关闭脚本
else##脚本在5秒后打开,提示
退出##具有相同权限的用户
fi

您的代码似乎有缺陷。我不知道如何才能
打开
的输出,并引用
find
,该输出可能包含多个结果。无论如何,这都不是一个好主意。另外,为什么不先显示菜单,然后在知道该选项后才进行相关搜索?如果我不这样做,可能会将等待时间缩短四倍我正确理解了你的问题。顺便说一句,跟进我上面提到的
find
open
问题:你应该做的是
find~-name file.1-exec open{}+
。另外,如果你只是在你的主文件夹中查找名为
file.1
的文件,你也可以设置
globstar
选项(
shopt-s globstar
),然后使用通配符
~/**/file.1
。我不知道这是否比
查找
更快(从未做过基准测试),但如果您感兴趣,值得一试。毫无价值,OP必须安装
bash
4或更高版本才能使用
globstar
选项。@4ae1e1我将使用
source
解决我的难题:)一般来说,你不希望像这样组合语言。我很确定你没有理由不能编写一个AppleScript来完成这项工作,或者在shell中完成整个工作。
#!/bin/sh

## READ LOCAL DIR
## CHANGE BACK-SLASH TO COLON (USE FOR VARIABLE IN OSASCRIPT)
dir=$(pwd)
dir=${dir//\//:}

## REPAIR AND RELOCATE FILE FUNCTION
## RUN FUNCTION ON FIRST LOAD AND WHEN USER INPUTS [repair]
## STORES VARIABLES IN TMP FOLDER TO BE CALLED LATER
function repaird() {    
    abd="$(find ~/ -name "FILE 1")" 
    cbd="$(find ~/ -name "FILE 2")"
    csd="$(find ~/ -name "FILE 3")"
    sad="$(find ~/ -name "FILE 4")"
    app="$(find ~/ -name "FILE.app")"  
    echo "#!/bin/sh" > /tmp/VAR_LIST.sh    ##CREATE .SH FILE TO STORE VARIABLES
    echo "" >> /tmp/VAR_LIST.sh
    echo "abd='$abd'" >> /tmp/VAR_LIST.sh
    echo "cbd='$cbd'" >> /tmp/VAR_LIST.sh
    echo "csd='$csd'" >> /tmp/VAR_LIST.sh
    echo "sad='$sad'" >> /tmp/VAR_LIST.sh
    cd /tmp
    chmod +x VAR_LIST.sh; }                

## CHECK IF VAR_LIST FILE EXIST
## IF NOT THEN PROCEED TO FIND FILES AND SAVE VARIABLES TO VAR_LIST

if ls /tmp/VAR_LIST.sh* 1> /dev/null 2>&1; then
    source /tmp/VAR_LIST.sh         ## USE SOURCE TO CALL OUR VAR_LIST 
else
    repaird
fi

## USE OSASCRIPT TO CALL DIALOG BOX WITH USER INPUT    

WORKOUT="$(osascript -e 'Tell application "System Events" to display dialog "Please enter your workout code:" & "\n[ab] = Ab" & "\n[cb] = Cb" & "\n[cs] = Cs" & "\n[sa] = Sa" & "\n[repair] = Repair Directory" with icon file "'$dir:appIcon.icns'" with title "MY_TITLE" buttons {"Cancel", "Ok"} default button 2 default answer ""' -e 'text returned of result' 2>/dev/null)"

## SEE IF USERS INPUT MATCHES ANY OF THE OPTIONS BELOW
## IF NOT THEN EXIT SCRIPT

if [ "$WORKOUT" = "ab" ] 
then 
  open "$abd"; afplay ohyeah.mp3

elif [ "$WORKOUT" = "cb" ] 
then
  open "$cbd"; afplay ohyeah.mp3

elif [ "$WORKOUT" = "cs" ] 
then
  open "$csd"; afplay ohyeah.mp3

elif [ "$WORKOUT" = "sa" ] 
then
  open "$sad"; afplay ohyeah.mp3

elif [ "$WORKOUT" = "repair" ]       ## REPAIR WILL DO THE FOLLOWING
then
  rm /tmp/VAR_LIST.sh             ## RM CURRENT VAR_LIST
  repaird                        ## RUN FUNCTION <REPAIRD>
  sleep 5; open "$app" &         ## DELAY 5 SECONDS THEN OPEN SCRIPT AS BACKGROUND
  close "$app"                   ## CLOSE SCRIPT  
else                             ## SCRIPT OPENS AFTER 5 SECONDS WHICH PROMPTS
  exit                           ## USER WITH SAME 

fi