在Linux中创build可执行文件

我打算做的一件事情是编写(痛苦简单的)Perl脚本,我希望能够在不从terminal显式调用Perl的情况下运行它们。 我明白,要做到这一点,我需要授予他们执行权限。 用chmod做这件事很简单,但是它似乎也是一个稍微费力的额外步骤。 我想要的是以下两件事之一:

首先,有没有办法在保存文件时设置执行标志? 目前我正在尝试使用gedit和geany,但是如果它有这个function的话,它会愿意切换到一个类似(或更好)的特色编辑器。

如果没有,有没有办法来声明在一个特定的目录中创build的所有文件应该有执行权限?

我的umask被设置为022,这应该是好的,据我了解,但它会出现文件创build为文本文件(具有666默认权限),而不是可执行文件(777默认权限)。

也许我只是在懒惰,但我认为必须有一个更方便的方式比chmod每一个创build的脚本。

使文件可执行:

chmod + x文件

查找perl的位置:

perl

这应该返回类似的东西

/ bin / perl有时候是/ usr / local / bin

然后在脚本的第一行添加:

#!“path”/ perl从上面的path例如

#!/ bin中/ perl的

然后你可以执行这个文件

。/文件

PATH可能有一些问题,所以你可能想要改变这个…

不需要破解你的编辑器,或者切换编辑器。

相反,我们可以创build一个脚本来观察你的开发目录和chmod文件。 这是我在附加的bash脚本中所做的。 您可能需要阅读注释并根据需要编辑“configuration”部分,然后build议将它放在$ HOME / bin /目录中,并将其执行添加到$ HOME / .login或类似文件中。 或者你可以从terminal运行它。

这个脚本确实需要inotifywait,它在Ubuntu的inotify-tools包中,

 sudo apt-get install inotify-tools 

build议/编辑/改进是值得欢迎的。

 #!/usr/bin/env bash # --- usage --- # # Depends: 'inotifywait' available in inotify-tools on Ubuntu # # Edit the 'config' section below to reflect your working directory, WORK_DIR, # and your watched directories, WATCH_DIR. Each directory in WATCH_DIR will # be logged by inotify and this script will 'chmod +x' any new files created # therein. If SUBDIRS is 'TRUE' this script will watch WATCH_DIRS recursively. # I recommend adding this script to your $HOME/.login or similar to have it # run whenever you log into a shell, eg 'echo "watchdirs.sh &" >> ~/.login'. # This script will only allow one instance of itself to run at a time. # --- config --- # WORK_DIR="$HOME/path/to/devel" # top working directory (for cleanliness?) WATCH_DIRS=" \ $WORK_DIR/dirA \ $WORK_DIR/dirC \ " # list of directories to watch SUBDIRS="TRUE" # watch subdirectories too NOTIFY_ARGS="-e create -q" # watch for create events, non-verbose # --- script starts here --- # # probably don't need to edit beyond this point # kill all previous instances of myself SCRIPT="bash.*`basename $0`" MATCHES=`ps ax | egrep $SCRIPT | grep -v grep | awk '{print $1}' | grep -v $$` kill $MATCHES >& /dev/null # set recursive notifications (for subdirectories) if [ "$SUBDIRS" = "TRUE" ] ; then RECURSE="-r" else RECURSE="" fi while true ; do # grab an event EVENT=`inotifywait $RECURSE $NOTIFY_ARGS $WATCH_DIRS` # parse the event into DIR, TAGS, FILE OLDIFS=$IFS ; IFS=" " ; set -- $EVENT E_DIR=$1 E_TAGS=$2 E_FILE=$3 IFS=$OLDIFS # skip if it's not a file event or already executable (unlikely) if [ ! -f "$E_DIR$E_FILE" ] || [ -x "$E_DIR$E_FILE" ] ; then continue fi # set file executable chmod +x $E_DIR$E_FILE done 

你所描述的是处理这个问题的正确方法。

你说你想留在GUI中。 您通常可以通过文件属性菜单设置执行位。 你也可以学习如何为上下文菜单创build一个自定义动作,如果你这么倾向的话。 这当然取决于你的桌面环境。

如果您使用更高级的编辑器,则可以编写保存文件时执行的操作。 例如(我只对vim非常熟悉),你可以把它添加到你的.vimrc文件中,创build任何以“ #!/*/bin/* ”开头的新文件。

 au BufWritePost * if getline(1) =~ "^#!" | if getline(1) =~ "/bin/" | silent !chmod +x <afile> | endif | endif 

这真的没什么大不了的。 您可以使用单个命令创build一个脚本:

 chmod a+x *.pl 

在创build一个perl文件后运行脚本。 或者,你可以用这样的命令打开一个文件:

 touch filename.pl && chmod a+x filename.pl && vi filename.pl # choose your favorite editor 

我认为你遇到的问题是,尽pipe你可以在系统中设置自己的umask值,但是这不允许你通过gedit(或者你使用的任何编辑器)显式地控制在新文件上设置的默认权限, 。

我相信这个细节是硬编码到gedit和大多数其他编辑。 改变它的选项是(a)破解你自己的gedit mod,或者(b)find一个文本编辑器,允许你设置新文件的默认权限。 (对不起,我不知道)

有鉴于此,必须要修改你的文件真的不错,对吧?