単純なawkプログラムファイルを作成しました。/media/ravan/data/program
パスワード:
#! /usr/bin/awk -f
BEGIN { print "Don’t Panic bro!" }
端末で実行している場合:
ravan@ravan:/media/ravan/data/program$ ls
awkTest.awk testawk.awk
ravan@ravan:/media/ravan/data/program$ chmod +x awkTest.awk
ravan@ravan:/media/ravan/data/program$ ./awkTest.awk
bash: ./awkTest.awk: Permission denied
mount
出力セクション
/dev/sda3 on /media/ravan/data type fuseblk (rw,nosuid,nodev,allow_other,default_permissions,blksize=4096)
出力ls -l
ravan@ravan:~$ ls -l /media/ravan/data/program
total 1
-rw------- 1 ravan ravan 55 Nov 9 15:03 awkTest.awk
-rw------- 1 ravan ravan 52 Nov 9 13:29 testawk.awk
ベストアンサー1
ファイルシステムのマウントに何が起こっているのかわかりませんが、問題を解決するのは非常に簡単です。 Shebangが実際に何をしているのかを理解するだけです。
ファイルが実行可能としてマークされていてそれを実行しようとすると、ファイルの最初の2バイトが確認されます。その場合#!
、シェルはファイルの最初の行をコマンドとして実行し、そのコマンドの引数としてファイル自体のパスを実行します。
つまり、#!/bin/bash
というファイルの最初の行にある内容は/tmp/myscript.sh
で実行されます/bin/bash /tmp/myscript.sh
。
同様に、実行時に#!/usr/bin/awk -f
最初の行は./awkTest.awk
(またはインストールの問題が妨げられない場合)になります/usr/bin/awk -f ./awkTest.awk
。
解決策は単に実行することです。awk -f awkTest.awk
これにより、スクリプトが期待どおりに実行されます。
awk
ありますのでご注意ください説明したコンパイルする代わりに、noexec
デバイスのインストールオプションにフラグを立ててawkスクリプトを保存してください。に慣れるスクリプトの実行を禁止します。それはあなたがそれを実行するのを止めるだけです実行ファイルとして。したがって、あなたがする必要があるのは、awk
バイナリ実行可能ファイル(/usr/bin/awk
)を実行することだけです。読むawk
もちろん、あなたのスクリプトはnoexec
このフラグによってブロックされず、あなたが書いたスクリプトを実行します。