スクリプトは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
出力をawk
awkの出力に送信して変数に保存します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
シェルがこの行を実行中にエラーが発生しました。