Não é possível executar o programa awk

2

Eu criei um arquivo de programa awk simples em /media/ravan/data/program

O código:

#! /usr/bin/awk -f
BEGIN { print "Don’t Panic bro!" }

Durante a execução no terminal:

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

A parte de mount output

/dev/sda3 on /media/ravan/data type fuseblk (rw,nosuid,nodev,allow_other,default_permissions,blksize=4096)

A saída de 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
    
por Ravan 09.11.2015 / 12:16

1 resposta

1

Eu não sei o que está acontecendo com a sua montagem do sistema de arquivos, mas trabalhar é muito simples. Você só precisa entender o que a shebang está realmente fazendo.

Quando um arquivo é marcado como executável e você tenta executá-lo, os dois primeiros bytes do arquivo são verificados. Se eles forem #! , o shell executará a primeira linha do seu arquivo como um comando, seguido pelo caminho para o próprio arquivo como um argumento para esse comando.

Em outras palavras, #!/bin/bash , colocado como a primeira linha em um arquivo chamado /tmp/myscript.sh , será executado como /bin/bash /tmp/myscript.sh .

Da mesma forma, #!/usr/bin/awk -f como a primeira linha de ./awkTest.awk , quando executada, se torna (ou deve se tornar se o problema de montagem não estiver interferindo) /usr/bin/awk -f ./awkTest.awk .

A solução é apenas executar awk -f awkTest.awk e seu script será executado conforme o esperado.

Observe que, como awk é interpretado em vez de compilado, um noexec sinalizador nas opções de montagem do dispositivo que contém seu script awk não impede você de executar seu script. Isso só o impede de executá-lo como um executável . Portanto, tudo o que você precisa fazer é executar o executável binário awk ( /usr/bin/awk ) e ele lerá seu script awk , o que obviamente não é impedido pelo sinal noexec , e ele fará o que você escreveu.

    
por 22.12.2015 / 02:53

Tags