【问题标题】:How to make an executable shell script macOS that can be used on any computer如何制作可在任何计算机上使用的可执行 shell 脚本 macOS
【发布时间】:2017-04-06 07:18:32
【问题描述】:

我有一个 shell 文件,我需要创建一个可执行文件,它可以在没有chmod +x任何 Mac 上运行,只需双击它。我怎样才能做到这一点?我试过appify,但双击它的结果不会执行我的文件。我也尝试过How to execute a shell script from within an app and show it in the terminal 中提出的解决方案,但这会导致错误Permission denied

我要执行的脚本是:

#!/bin/bash

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

cd $DIR

SLASH="/"

INFILE=`find $DIR -name "*.csv"`

DONE=`perl myfile.pl -i $INFILE -o output.csv -l $DIR$SLASH`

echo "File(s) are ready to use"

echo "Press [enter] to escape"

read terminate

【问题讨论】:

  • bash yourfile.sh
  • 自动化脚本/应用程序可能会有所帮助。
  • 您不能神奇地使文件在其他人的系统上可执行。完成这项工作需要三件事:1. shell 脚本,2. perl 脚本(与 shell 脚本在同一文件夹中)和 3. 输入的 .csv 文件?它们也在同一个文件夹中(这开始变得非常混乱,因为 find 会发现 output.csv 作为输入文件列表的一部分)。您至少需要一个可执行的 shell 脚本才能启动,但正如所写的那样,它不会很好地工作。
  • 我的可交付成果是一个包含运行 shell 脚本的所有要求的文件夹。在最佳情况下,最终用户只需双击可执行文件并准备好输出文件。
  • 如果您要交付文件夹;它必须被捆绑。所有典型的捆绑形式(.zip、.tar)都将尊重捆绑中文件上设置的可执行位,因此这是克服的一个障碍。 chepner 的单个 perl 脚本可能是更好的解决方案;并且可以嵌入到可以签名的自动机可执行文件中(绕过看门人)

标签: bash shell sh executable


【解决方案1】:

要使您的文件可执行,令人惊讶的是,您需要添加可执行权限。

为此,您可以运行chmod +x filename.sh

这将使您可以./filename.sh 并执行该文件。

当您执行ls -lah 时,您会看到左侧的权限中会添加一个x

您可以进一步了解用户/组/世界执行权限,但这是另一个主题。

【讨论】:

  • 注意:“我需要制作一个可执行文件,它可以在没有 chmod +x 的任何 Mac 上运行,只需双击它”。我很清楚 chmod +x 将使我的文件在我的计算机上可执行,但我想制作一个可执行文件,我可以将其交付给无论出于何种原因反对终端的人
  • 那么(危险的)chmod 777 filename.sh 应该为您解决这个问题,尽管我不建议这样做 - 检查用户/组/世界权限之间的差异
  • 这仍然会在任何其他系统上产生"The file “filename.sh” could not be executed because you do not have appropriate access privileges."
  • chmod 777 永远不需要,chmod +rx 应该确保每个人都可以执行该文件。但更大的问题是为什么filename.sh 在“传输中”丢失了它的可执行权限位 - 假设它一开始就拥有它们。
猜你喜欢
  • 1970-01-01
  • 2010-11-16
  • 1970-01-01
  • 2020-02-24
  • 1970-01-01
  • 1970-01-01
  • 2012-09-30
  • 1970-01-01
  • 2012-09-20
相关资源
最近更新 更多