awkプログラムを実行できません

awkプログラムを実行できません

単純な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このフラグによってブロックされず、あなたが書いたスクリプトを実行します。

おすすめ記事