+xにもかかわらず、スクリプトの実行権限が拒否されました。

+xにもかかわらず、スクリプトの実行権限が拒否されました。

スクリプトはexecパーティション(/home/~~~の下)にあり、+ xフラグ(-rwxr-xr-x)があります。

Bashシェル(スクリプトなし)では実行可能ですが、スクリプトでは実行できません。スクリプトはとても簡単です。

#!/bin/bash

data=cat $PWD/.git/config | awk '{for(i=1;i<NF;i++)if($i~"merge")print$(i+2)}'
echo data : $data

結果:

/home001/myaccount/uploader.sh: line 3: /home001/myaccount/mydirectory/.git/config: Permission denied

ターゲットファイルに対する権限は、次のようにシンボル化された777です。

lrwxrwxrwx

しかし、実行可能で、bashコマンドラインでうまく動作します。

myaccount@myserver:~/mydirectory$ cat $PWD/.git/config|awk '{for(i=1;i<NF;i++)if($i~"merge")print$(i+2)}'
mybranch

スクリプトには+ xフラグがあり、実行可能パーティションにあります。スクリプトなしで実行できますが、スクリプトでは実行できません。なぜ?

ベストアンサー1

問題は次の行にあります。

data=cat $PWD/.git/config

dataこれはその値を持つようにシェル変数を一時的に設定し、catファイルを実行しようとします$PWD/.git/config。おそらくあなたはそれをしたくないので、これは不幸なことです。

次のことができます。

data=$(cat $PWD/.git/config | awk '{for(i=1;i<NF;i++)if($i~"merge")print$(i+2)}')

上記のコマンドはコマンドを実行し、cat出力をawkawkの出力に送信して変数に保存しますdata。それがあなたが望むものなら、これはcat重複します。上記の内容を次のように変更してください。

data=$(awk '{for(i=1;i<NF;i++)if($i~"merge")print$(i+2)}' $PWD/.git/config)

エラーメッセージを説明してください。

/home001/myaccount/uploader.sh: line 3: /home001/myaccount/mydirectory/.git/config: Permission denied

上記では、uploader.sh実行が進行中であることを知っています。これは、権限に問題がないことを示しますuploader.sh。エラーは3行目で発生します。ここでuploader.shコマンドは次のようになります。

data=cat $PWD/.git/config | awk '{for(i=1;i<NF;i++)if($i~"merge")print$(i+2)}'

Permission deniedシェルがこの行を実行中にエラーが発生しました。

おすすめ記事