簡體   English   中英

awk:致命:無法打開文件“文件”進行讀取(權限被拒絕)

[英]awk: fatal: cannot open file 'file' for reading (Permission denied)

下面的一段代碼是我通過批處理腳本在遠程服務器上運行的較大程序的一部分,其中#!/bin/bash -l作為其第一行。

在我的本地機器上它運行正常,但在遠程服務器上出現權限問題。 可能有什么問題?

代碼的描述可能對問題並不重要,但基本上代碼使用 awk 來處理基於文件名的文件內容。

為什么 awk 被拒絕操作文件的權限? 當我直接在遠程服務器的 shell 提示符上運行 awk 時,它可以正常工作。

#!/usr/bin/env python

list_of_files = ["file1", "file2", "file3"]

for file in list_of_files:
       awk_cmd = '''awk '/^>/{print ">" substr(FILENAME,1,length(FILENAME)) ++i; next} 1' ''' + file +  " > tmp && mv tmp " + file + \
                 " | cat files > 'pooled_file' "
       exitcode = subprocess.call(awk_cmd, shell=True)

任何幫助,將不勝感激。

我很確定這是一個權限問題,因為當您登陸遠程機器時,它不會登陸您的 Input_file(s) 所在的目錄,當然它會登陸遠程服務器上登錄用戶的 HOME 目錄。 因此,使用完整路徑提及文件名是一個好習慣(確保具有您提供的路徑的文件名也存在於目標位置,否則您可以在其上編寫一個包裝器以檢查文件是否存在)。 請您嘗試以下操作。

#!/usr/bin/env python

list_of_files = ["/full/path/file1", "/full/path/file2", "/full/path/file3"]

for file in list_of_files:
       awk_cmd = '''awk '/^>/{num=split(FILENAME,array,"/");print ">" substr(array[num],1,length(array[num])) ++i; next} 1' ''' + file +  " > tmp$$ && mv tmp$$ " + file + \
                 " | cat files > 'pooled_file' "
       exitcode = subprocess.call(awk_cmd, shell=True)

我還沒有測試它,但我已經根據完整路徑進行了更改,因為awk將打印帶有文件名的完整路徑,所以我已將代碼中的FILENAME更改為根據數組的位置,我還將tmp臨時文件更改為tmp$$以更安全邊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM