为什么快捷方式运行的Bash脚本文件无法获取文件的内容?

为什么快捷方式运行的Bash脚本文件无法获取文件的内容?

我有一个脚本,用于启动(活动追踪器)的新活动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")

相关内容