我有一个脚本,用于启动(活动追踪器)的新活动hamster
。这是我当前的脚本:
ACTIVITY=`zenity --entry --title "Enter new activity name" --text "New activity name:"`
hamster start $ACTIVITY
问题是我希望脚本记住最后一项任务,这样我就可以直接运行它,ENTER而不必再次输入名称。我希望它将其名称存储在文件中。目前我已经手动创建了文件:/usr/local/bin/hamster-log
。
到目前为止我的脚本如下:
file=/usr/local/bin/hamster-log
last=$(<$file)
activity=$(zenity --entry --title "Enter new activity name" --text "New activity name:" --entry-text "$last")
hamster start "$activity"
if [ ! -z "$activity" ]; then
destdir=/some/directory/path/filename
if [ -f "$file" ]; then
echo "$activity" > "$file"
fi
fi
奇怪的是,当我从终端运行脚本时,它会正确读取文件的内容,但是当我使用快捷方式运行它时,它不会读取文件。
我已将该文件的权限设置为777
。
答案1
我不确定您如何在自定义快捷方式中调用脚本,但有两种可能性:
- 如果您正在调用一个解释器(例如
sh /path/to/script
):那么您正在调用sh
或不兼容的 shell:只有在 Bash 或兼容 shell 中,诸如的命令替换$(<file)
才会被替换为的内容file
,因此您可能正在调用不兼容的 shell; - 您正在调用脚本(例如
/path/to/script
):那么脚本顶部就没有shebang。
因此,要么:
- 如果是第一个,则调用正确的解释器(
bash /path/to/script
); - 如果是第二个,请在脚本顶部添加一个shebang(
#!/bin/bash
)。
或者做一些丑陋的事情(但是 POSIX 和可移植的),例如:
last=$(cat "$file")