Home php c# sql c c++ javascript python java go android git linux asp.net django .net node.js ios xcode cocoa iphone mysql tomcat mongodb bash objective-c scala visual-studio apache elasticsearch jar eclipse jquery ruby-on-rails ruby rubygems android-studio spring lua sqlite emacs ubuntu perl docker swift amazon-web-services svn html ajax xml java-ee maven intellij-idea rvm macos unix css ipad postgresql css3 json windows-server vue.js typescript oracle hibernate internet-explorer github tensorflow laravel symfony redis html5 google-app-engine nginx firefox sqlalchemy lucene erlang flask vim solr webview facebook zend-framework virtualenv nosql ide twitter safari flutter bundle phonegap centos Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 28

0
votes
answers
7 views
+10

Facebook SDK返回不正確的事件時間

0

我有一個網站,顯示來自網站所有者的Facebook頁面的事件。幾個星期前,有人注意到網站上的事件時間顯示錯誤,但他們在幾年內都是正確的。所以基本上我試圖找出問題所在。Facebook SDK返回不正確的事件時間

下面是一個例子

事件X擁有2017-12-18T17的開始時間時間戳:00:00-0500。那個日期是正確的,那個時間 - 1700或5:00 - 是正確的時間。

所以我有這樣的代碼的時間戳轉換的東西我可以顯示

$start_time = date('g:i a', strtotime($event['start_time'])); 

這返回的10:00 PM

時間我與結束時間不正確地轉換了同樣的問題。

我使用此代碼轉換的日期(使用上述相同的時間戳):

$start_date = date('l, F j, Y', strtotime($event['start_time'])); 

這將返回正確的日期,這讓我困惑甚至更多,因爲如果日期正確轉換,請問該怎麼時間不正確轉換?

有人可以幫助我得到轉換的時間,所以我可以在網站上獲得這些事件嗎?

+0

看起來像不同的時區問題。 –

+0

'date('P')'的輸出是什麼? – Ben

+0

@本日期('P')輸出爲+00:00 –

沙发
0
1

這是不同的時區問題。

你有一個帶時區的日期時間-05:00但是,date('P')輸出,你的服務器時區是+00:00。您可以使用DateTime類將日期時間轉換爲您想要的時區。

// convert time to datetime instance 
$timestamp = strtotime($event['start_time']); 
$datetime = new DateTime; 
$datetime->setTimestamp($timestamp); 

// set timezone to US/Eastern, Eastern Standard Time (EST), UTC -5 
$datetime->setTimezone(new DateTimeZone('US/Eastern')); 

// output datetime format 
$datetime->format('g:i a'); 
$datetime->format('l, F j, Y'); 
+0

您是一位紳士和學者。謝謝! –

0
votes
answers
6 views
+10

在sed命令中正則表達式不正確

0

我想在批處理控制檯中使用sed替換一些字符串。我的輸入包括在文件中有這樣的詩句:在sed命令中正則表達式不正確

$ head qiimetax_sorted.txt 

A61579.1.1437 
D_0__Bacteria;D_1__Thermotogae;D_2__Thermotogae;D_3__Thermotogales; 
D_4__Fervidobacteriaceae;D_5__Fervidobacterium;Ambiguous_taxa;D_7__; 
D_8__;D_9__;D_10__;D_11__;D_12__;D_13__;D_14__ 
AAAA02020712.626.2096 
D_0__Bacteria;D_1__Proteobacteria;D_2__Alphaproteobacteria;D_3__Rhizobiales; 
D_4__Bradyrhizobiaceae;D_5__uncultured;D_6__Oryza sativa 
Indica Group (long-grained rice);D_7__;D_8__;D_9__;D_10__;D_11__;D_12__; 
D_13__;D_14__ 

現在我試圖抹去這個sed命令的名字前的「D_number__」字符串,它沒有任何替換:

sed -r 's/D_d+__//g' qiimetax_sorted.txt > qiimesed.txt 

任何想法是哪個問題? 謝謝!

+0

也見[爲什麼在X,但不以y我的正則表達式的工作?](HTTPS:/ /unix.stackexchange.com/questions/119905/why-does-my-regular-expression-work-in-x-but-not-in-y) – Sundeep

沙发
0
2

你的正則表達式語法是perl like。

所以,如果你想保留它:

perl -pe 's/D_d+__//g' qiimetax_sorted.txt > qiimesed.tx 

sed -r 's/D_[0-9]+__//g' qiimetax_sorted.txt > qiimesed.tx 
+2

建議:使用'-E'而不是'-r'。 GNU sed支持並據我所知,其他一些sed版本現在支持'-E' .. – Sundeep

0
votes
answers
6 views
+10

腳本/命令合併3個文件保留最後的文件名

-1

我有要求,我有多個文件(頭文件,尾部文件和數據文件)需要合併成一個文件保留文件名。腳本/命令合併3個文件保留最後的文件名

輸入文件

WP2024916_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_7_1.TXT (Header file) 
WP2024916_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_7_2.TXT (data file) 
WP2024916_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_7_3.TXT (trailer file) 

WP2024078_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_3_1.TXT (Header file) 
WP2024078_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_3_2.TXT (data file) 
WP2024078_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_3_3.TXT (trailer file) 

輸出文件應具有相同的順序和文件名應該是這樣的文件中的數據。

WP2024916_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_7.TXT 
WP2024078_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_3.TXT 

需要快速幫助來實現這一點。

在此先感謝。

+3

所以你的意思是創建一個shell腳本?你有多遠?在你的問題中包含你的腳本。 – mattias

+0

這將是'cat'的有用用法 –

+0

我試過這個 ls | awk -F'_''!x [$ 1] ++ {print $ 1}'|同時讀取-r行 做 cat $ line >> $ line .txt 完成它創建具有正確數據的臨時文件,但我需要重命名文件名,如上所述,並刪除現有文件。只保留最終文件。 – VTIN

沙发
0
0

假設所有的文件名是在你的問題中顯示的格式(即,9場單下劃線分隔)...

一些樣本數據:

$ for f in WP*_?_?.TXT 
do 
    echo "+++++++ $f" 
    cat $f 
    echo "" 
done 

+++++++ WP2024078_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_3_1.TXT 
2024916 header 

+++++++ WP2024078_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_3_2.TXT 
2024916 data 

+++++++ WP2024078_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_3_3.TXT 
2024916 trailer 

+++++++ WP2024916_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_7_1.TXT 
2024078 header 

+++++++ WP2024916_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_7_2.TXT 
2024078 data 

+++++++ WP2024916_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_7_3.TXT 
2024078 trailer 

因爲我對於這個簡單的情況下,選擇使用cut代替awk(少一點打字)以提取公共/基本文件前綴:

$ ls WP*_?_?.TXT | cut -d"_" -f1-8 | sort -u | while read -r fprefix 
do 
    # concatenate source files 
    cat ${fprefix}_[123].TXT > ${fprefix}.TXT 

    # display concatenated files 
    echo "+++++++ ${fprefix}.TXT" 
    cat ${fprefix}.TXT 
    echo "" 
done 

+++++++ WP2024078_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_3.TXT 
2024916 header 
2024916 data 
2024916 trailer 

+++++++ WP2024916_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_7.TXT 
2024078 header 
2024078 data 
2024078 trailer 
+0

非常感謝你..它的工作,只有很小的變化,我做了刪除WP從LS命令,因爲我可以有文件名也以其他字母開頭..更多的事情,我想在這裏添加的是我想刪除3個源文件,並只保留最終文件..我可以刪除.. ..? – VTIN

+0

如果'$ {fprefix}'是正確的,你可以刪除3x源文件,如:'rm $ {fprefix} _?_ ?. TXT' – markp

+0

再次感謝您的大力幫助......您是天才! !你讓我今天一整天都感覺很好 !!!!!!這裏是我正在使用的最終代碼****************************************** ******* ls * _?_ ?. TXT | cut -d「_」-f1-8 | sort -u |而讀-r fprefix 做 #串連的源文件 貓$ {fprefix} _ [123] .TXT> $ {fprefix} .TXT #顯示級聯文件 回聲「+++++++ $ {fprefix } .TXT「 cat $ {fprefix} .TXT rm $ {fprefix} _ ?. TXT echo」「 done ******************** ********************** – VTIN

板凳
0
0
ls *_?_?.TXT | while read -r filename 
do 
    # concatenate source files 
    cat $filename >> ${filename%_*}.TXT 
    rm $filename 
done 

將文件內容添加到編號部分被切斷的目標文件。

不需要cutsort,但不覆蓋現有的目標文件。

0
votes
answers
6 views
+10

中心對齊/ bash中

1

對齊ASCII藝術,我只是工作在我的bash項目和中心對齊/ bash中

我想報頭ASCII藝術在每當終端在任何決議執行腳本中心自動調整。這可能是配偶嗎? 以下是我的代碼:

#!/bin/bash 
clear 
echo 
echo -e "		1▄██████▄#0000▄████████0000▄████████11▄██████▄ "; 
echo -e "		███0000███111███0110███111███1011███1███#0000██"; 
echo -e "		███0001███111███0111███111███1100█?11███#ffff██"; 
echo -e "		███0010███11▄███▄▄▄▄██?11▄███▄▄▄11111███#0000██"; 
echo -e "		███0011███1??███?????111??███???11111███#ffff██"; 
echo -e "		███0100███1?███████████111███1101█▄11███#0000██"; 
echo -e "		███0101███111███1000███111███1110███1███#ffff██"; 
echo -e "		1?██████?ffff███1001███111██████████11?██████?1"; 
echo -e "

" 
+0

如果您有不同寬度的線條,您可以使用一個變化,例如, 'printf「%$((($ {COLUMNS} - $ {#string})/ 2))s n」「$ string」'(對於相同的寬度,choroba顯示的固定縮進是通向的方式) –

+0

David又一次。 你是真正的親人, –

+0

當你完成這個項目時,你將成爲ANSI/ASCII藝術專家':)' –

沙发
0
2

您可以使用它返回終端的寬度列的環境變量。

banner_width=46 
indent=$(((COLUMNS - banner_width)/2)) 
prefix='' 
for ((i=1; i<=indent; i++)) ; do 
    prefix+=' ' 
done 
echo 
echo -e "${prefix}1▄██████▄#0000▄████████0000▄████████11▄██████▄ "; 
+1

如果它不是交互式shell,我建議在開頭插入以下內容,因爲否則變量COLUMNS沒有設置:'COLUMNS = $(tput cols)'或'eval $(調整大小)' – Cyrus

0
votes
answers
5 views
+10

殺死進程

0

我有一個for循環來獲取PID列表並殺死每個PID。我想顯示PS輸出的整行並將其寫入/ tmp/outfile。但是從PS輸出的每一行中,每個字段(PID,PPID,...)都會在/ tmp/outfile中與新行一起寫入。因此,如果PS輸出有三行作爲輸出,我想將這三行記錄到/ tmp/outfile中,但它會打破行中的每個字段並添加一個新行。我該怎麼做。殺死進程

for list in `ps -ef | grep "${process_name}" | grep -v "${SCRIPTNAME}" | grep -v grep` 
do 
    echo "$list" >> $CUSTOM_TMP/test5566 
    PID=`echo $list | awk '{print $2}'` 
    kill -TERM "$list" 
done 
+0

使用「回聲-n」將從輸出 – bobah 2010-06-04 07:04:27

沙发
0
3

您的for循環不會迭代行,但每個單獨的字段。 你的kill命令也有些不對。 只需更改您的代碼是這樣的:

ps -ef | grep "${process_name}" | grep -v "${SCRIPTNAME}" | grep -v grep | while read list 
do 
    echo "$list" >> $CUSTOM_TMP/test5566 
    PID=`echo $list | awk '{print $2}'` 
    kill -TERM "$PID" 
done 
+0

+1 while'read' – 2010-06-04 07:57:48

+0

非常感謝信息。如果PS輸出沒有找到記錄,我想將它寫入日誌文件。我嘗試了下面的方式,它不工作。 if [「$ {list}」=「」];然後回聲「找到沒有進程名稱 - grep找不到記錄」fi – Arav 2010-06-07 00:47:33

+0

另外,如果kill命令失敗,我想將錯誤輸出重定向到一個變量並使用自定義API將其寫入日誌文件。這裏的問題,如果PS錯誤輸出有多行,當我將它移動到變量時,它會用空格替換新行。不知道 我該如何糾正這一點。與APILOG函數我可以只傳遞變量作爲參數。 kill -TERM「$ PID」2> $ CUSTOM_TMP/error_kill if [$? -ne 0];然後 ERROR = $(<$ CUSTOM_TMP/error_kill) WriteAPILog ERROR 「錯誤消息:$ ERROR」 RM $ CUSTOM_TMP/error_kill 音響 – Arav 2010-06-07 00:48:04

板凳
0
1

是不是更容易地使用你正在嘗試做killall命令?

+0

進程名稱中刪除一個換行符作爲參數傳遞給腳本傳遞。可能有2或3個進程同名,所以我試圖殺死它。如果我按照上面的方式而不是killall我可以做什麼 – Arav 2010-06-04 07:40:10

+0

也許吧,但是OP想用一個shell腳本來做:) – 2010-06-04 07:54:40

+0

非常感謝 – Arav 2010-06-07 00:50:22

地板
0
0

你想循環運行之前ps

ps -ef | grep $"{process_name}" | grep -v "${SCRIPTNAME}" | grep -v grep > $CUSTOM_TMP/test5566 2>/dev/null 

for PID in `cat $CUSTOM_TMP/test5566 | awk '{print $2}'`; do 
     kill -TERM $PID 
done 
rm -f $CUSTOM_TMP/test5566 

我還要插入一些理智,可能使用wc以確保文件實際上得到了一些數據從ps

+0

非常感謝您的信息 – Arav 2010-06-07 00:49:37

4楼
0
1

根本不需要循環。這用tee寫你的臨時文件。

list=$(ps -ef | grep "${process_name}" | grep -v "${SCRIPTNAME}" | grep -v grep | tee $CUSTOM_TMP/test5566 | awk '{printf "%s ", $2') 
kill -TERM $list 
+0

非常感謝的信息。如果PS輸出沒有找到記錄,我想將它寫入日誌文件。我嘗試了下面的方式,它不工作。 if [「$ {list}」=「」];然後回聲「沒有找到進程名稱 - Grep沒有找到記錄」fi – Arav 2010-06-07 00:48:42

+0

另外,如果kill命令失敗,我想將錯誤輸出重定向到一個變量並使用自定義API將其寫入日誌文件。這裏的問題,如果PS錯誤輸出有多行,當我將它移動到變量時,它會用空格替換新行。不知道我該如何糾正這一點。與APILOG函數我可以只傳遞變量作爲參數。 kill -TERM「$ PID」2> $ CUSTOM_TMP/error_kill if [$? -ne 0];那麼ERROR = $(<$ CUSTOM_TMP/error_kill)WriteAPILog ERROR「錯誤消息:$ ERROR」rm $ CUSTOM_TMP/error_kill fi – Arav 2010-06-07 00:49:22

+0

@arav:如果您將後續代碼作爲對原始問題的修改發佈,讀起來會更容易。至於你的''if [「$ {list}」=「」]'片段,我認爲它沒有問題,假設'fi'是在一個單獨的行上(如果你不需要在它之前加一個分號)。順便說一句,「它不工作」根本沒有幫助。如果包含錯誤信息和結果與預期不同的特定方式,我們可以更好地幫助您。我不知道你的自定義API是如何工作的,但是這裏是Bash的工作方式:'variable = $( 2010-06-07 02:03:31

5楼
0
0

只要將awk部分移到最上面一行,否則您的代碼就沒問題了。

for list in `ps -ef | grep "${process_name}" | grep -v "${SCRIPTNAME}" | grep -v grep | awk '{print $2}` 

do 
    echo "$list" >> $CUSTOM_TMP/test5566 
    PID=`echo $list` 
    kill -TERM "$list" 
done 
+0

非常感謝您的信息 – Arav 2010-06-07 00:50:04

6楼
0
0

對於一個襯墊 - 如果你的系統有p纖ep -

pgrep -d ' ' ${process_name} > kill.log && kill -TERM $(< kill.log) 
0
votes
answers
5 views
+10

Python發送郵件,錯誤

0

當我使用python從unix服務器發送郵件時,我收到了額外的內容,如下所示sendmail.此內容顯示在郵件中。Python發送郵件,錯誤

From nobody Mon Dec 18 09:36:01 2017 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit 

我的代碼如下。

#reading data from file 
    data = MIMEText(file('%s'%file_name).read()) 
    #writing the content as html 
    content = MIMEText("<!DOCTYPE html><html><head><title></title></head><body>"+'%s'%data+"</body></html>", "html") 
    msg = MIMEMultipart("alternative") 

    msg["From"] = "[email protected]" 
    msg["To"] = "[email protected]" 
    msg["Subject"] = "python mail" 

    msg.attach(content) 

    p = Popen(["/usr/sbin/sendmail", "-t","-oi"], stdin=PIPE,universal_newlines=True) 
    p.communicate(msg.as_string()) 
+0

你是說你不期待「text/plain」內容以及html內容? – snakecharmerb

+0

我只是想避免這種情況,警告。我的文件內容是一個html數據,但是當我收到郵件時,我在消息上方看到這個警告。我想禁用它。 –

+0

我懷疑你還需要明確標識數據爲「html」。 'data = MIMEText(無論,「html」)'。 –

沙发
0
2

您正在構建的電子郵件的內容分爲兩個部分,如datacontent。您需要明確確認兩者都是HTML。因此,改變

data = MIMEText(file('%s'%file_name).read()) 

data = MIMEText(file('%s'%file_name).read(), "html") 
+0

謝謝,其實我的錯誤是,我已經添加到多個HTML標頭的數據,步驟: '含量= MimeText用於( 「<!DOCTYPE HTML> 」+ '%s' 的%數據+「」, 「HTML」)' 是沒有必要的,只是讀取文件作爲HTML的內容很好。 –

板凳
0
1

你應該看看消息字符串。你看到的消息不是警告,這正是已writen到消息:

data = MIMEText(file('%s'%file_name).read()) 
content = MIMEText("<!DOCTYPE html><html><head><title></title></head><body>" 
    +'%s'%data+"</body></html>", "html") 

data.as_string()實際上包含Content-Type: text/plain; ...,因爲它已經由第一MIMEText線,當你想包括加入它進入HTML頁面的主體。

你真正想要的可能是:

data = file(file_name).read() 
content = MIMEText("<!DOCTYPE html><html><head><title></title></head><body>" 
    +'%s'%data+"</body></html>", "html") 

但我也認爲你不需要它包括與一個MIMEMultipart("alternative")另一個層面:msg = content可能是不夠的。

最後,我不認爲這明確地開始一個新的進程來執行的sendmail是真的矯枉過正,當從標準庫aloready的smtplib模塊知道如何發送消息:

import smtplib 

server = smtplib.SMTP() 
server.send_message(msg) 
server.quit() 
+0

謝謝,其實我的錯誤是,我已經添加到多個HTML標題的數據,步驟: 'content = MIMEText(「<!DOCTYPE HTML> 「+ '%s' 的%數據+」」, 「HTML」)' 是沒有必要的,只是讀取文件內容爲HTML是好的 –

+1

@arun:如果你不再需要這個問題的幫助,如果答案有幫助,你應該接受一個。 –

0
votes
answers
4 views
+10

如何在unix中查看進程表?

-1

什麼是UNIX命令來查看進程表,記住表包含:如何在unix中查看進程表?

  • 進程狀態
  • 指針
  • 進程大小
  • 用戶ID
  • 進程ID
  • 事件描述
  • 優先
+1

您可以運行:'男人ps' – alfasin

+0

究竟你甚至「指針」和「事件描述」是什麼意思?這是您從某處複製的列表,還是您只是猜測流程表應包含哪些內容? – duskwuff

沙发
0
1

的「進程表」這樣的生活內核的內存。一些系統(如AIX,Solaris和Linux--不是「Unix」)有一個/proc文件系統,這些文件系統使這些表對普通程序可見。沒有這些,程序如ps(在SunOS 4等非常老的系統上)需要較高的權限才能讀取/dev/kmem(內核內存)特殊設備,並且具有關於內核內存佈局的詳細知識。

+0

但列出進程的命令是'ps';在Linux上,你也可以使用'top'或'htop',它們都訪問'/ proc /' –

+0

我提到了ps(最常見的例子)。頂部會是類似的。在HPUX的快速檢查中,雖然沒有/ proc,但ps和top不是setuid(有待進一步檢查)。所以我將其改爲SunOS 4 :-) –

板凳
0
0

您的問題是開放式的,對於您可能遇到的具體問題的回答可以在任何手冊頁中查找,正如@Alfasin在他的回答中所表明的。很大程度上取決於你想要做什麼。

正如@ThomasDickey在他的迴應中指出的那樣,在UNIX及其大部分衍生物中,查看進程在後臺或前臺運行的命令實際上是ps命令。

ps代表'process status',回答你的第一個項目符號。但是該命令使用了超過30個選項,並且取決於您尋求的信息以及系統管理員授予您的權限,您可以從命令中獲取各種類型的信息。例如,對於上面列表中的第二個項目符號,根據您要查找的內容,您可以獲得3種不同類型的指針的信息 - 會話指針(帶有選項'sess'),終端會話指針(tsess)和進程指針(uprocp)。

您列出的其餘項目大多可用作命令的標準輸出。

某些UNIX變體實現了文件系統內部系統進程表的視圖,以支持諸如ps之類的程序的運行。這通常安裝在/ proc上(請參閱上面的@ThomasDickey響應)

瞭解命令運行的典型原因包括系統管理責任,例如跟蹤啓動的進程的來源,殺死失控或孤立進程,檢查進程的文件大小以及必要時的設置限制等。UNIX開發人員還可以將其與ipc功能等結合使用。瞭解進程表和狀態將有助於與關聯的UNIX功能(如kvm界面)一起檢查故障轉儲等等,或者獲取或設置內核狀態。

希望這有助於

0
votes
answers
4 views
+10

使用nano中的當前時間戳創建新的列在Hive中

1

我想在nano表中使用當前時間戳在nano秒中創建一列。我怎麼能在插入數據時做到這一點?使用nano中的當前時間戳創建新的列在Hive中

沙发
0
1

當前current_timestamp功能蜂巢,不納秒時間。

但是你總是可以用create your own functions使用配置單元UDF來處理nano秒時間戳。

下面是UDF的示例,它將返回納秒時間的值long

import org.apache.hadoop.hive.ql.exec.UDF; 
import org.apache.hadoop.hive.ql.udf.UDFType; 

@UDFType(stateful = true) 
public class NanoTimeUdf extends UDF{ 

    public long evaluate() { 
     return System.nanoTime(); 
    } 

} 

創建一個JAR出上面的Java代碼(說tonanotime.jar),並添加JAR創建UDF函數返回當前時間納米。

ADD JAR /home/amit/tonanotime.jar; 
create TEMPORARY FUNCTION toNanoTime AS 'NanoTimeUdf'; 

現在,toNanoTime功能可用,您可以選擇查詢使用插入到新表,如: e.g

insert into table select toNanoTime() from other_table; 
0
votes
answers
4 views
+10

向遠程主機發出bash命令 - 寫入本地輸出文件時出錯

0

我試圖在幾臺遠程主機上並行運行多組命令。 我已經創建了構建這些命令,然後在本地文件沿線的寫入輸出,事情的腳本:向遠程主機發出bash命令 - 寫入本地輸出文件時出錯

ssh <me>@<ip1> "command" 2> ./path/to/file/newFile1.txt & ssh <me>@<ip2> 
"command" 2> ./path/to/file/newFile2.txt & ssh <me>@<ip2> "command" 2> 
./path/to/file/newFile3.txt; ...(same repeats itself, with new commands and new 
file names)... 

我的問題是,我的腳本運行這些命令時,我得到出現以下錯誤:

bash: ./path/to/file/newFile1.txt: No such file or directory 
bash: ./path/to/file/newFile2.txt: No such file or directory 
bash: ./path/to/file/newFile3.txt: No such file or directory 
... 

這些文件不存在但將被寫入。話雖如此,目錄路徑是有效的。

奇怪的是,如果我複製並粘貼整個大命令,那麼它的工作原理沒有任何問題。我寧願讓它自動化;)。

任何想法?

編輯 - 詳細信息:

我的文件系統是以下幾點:

- home 
    - User 
    - Desktop 
     - Servers 
     - Outputs 
      - ... 

我從家裏/用戶/桌面運行bash腳本/服務器。 該腳本創建需要在遠程服務器上運行的命令。首先,腳本創建文件將被存儲的目錄。

outputFolder="./Outputs" 
... 
mkdir -p ${outputFolder}/f{fileNumb} 
... 

腳本然後繼續創建將遙控器上的主機被稱爲命令,並且它們各自的輸出將被放置在所創建的目錄中。 目錄在那裏。運行這些命令會給我帶來錯誤,但是打印然後將這些命令複製到同一位置會出於某種原因。我也試圖給出目錄的完整路徑,仍然是同樣的問題。

希望我已經更清楚了一點。

+1

必須存在重定向才能工作的路徑(中間目錄不是自動創建的)。所以'mkdir -p path/to/file'在重定向'> path/to/file/newFile.txt'之前。 –

+0

您的問題似乎並未包含足夠的相關信息以允許投機以外的任何內容。請提出問題的[最小,完整和可驗證的示例](https://stackoverflow.com/help/mcve),以便所有相關信息(以及最小不相關信息)都在這裏。 –

+0

你的問題*仍然*沒有包含足夠的信息來真實地告訴發生了什麼 - 這就是創建一個MCVE的要點。但是你提到的「創建命令」讓我感到懷疑 - 你是否試圖在執行它們之前將命令存儲在變量中?如果是這樣,有很多事情可能會出錯。參見[BashFAQ#50:我試圖把一個命令放在一個變量中,但複雜的情況總是失敗!](http://mywiki.wooledge.org/BashFAQ/050)。 –

沙发
0
1

如果這是你得到確切的錯誤消息:

bash: ./path/to/file/newFile1.txt: No such file or directory 

然後你會注意到,有冒號和點之間的額外的空間,所以它實際上是試圖打開一個名爲" ./path/to/file/newFile1.txt"文件(不引號)。

但是,要實現這個目標,你需要在重定向使用引號將文件名,如

something ... 2> " ./path/to/file/newFile1.txt" 

還是第一個字符必須比常規的空間別的東西。一個非破壞性的空間也許可能是某些編輯可能創建的,如果你碰到了alt-space或其他類似的東西。

+0

是個好主意,但我再次檢查過,並且有一個空間。 – dtam

板凳
0
1

我不相信你已經證明足以正確回答這個問題。

這看起來不像ssh的問題,而是你調用(ssh)命令的方式。

你說你正在將這些命令寫入一個文件中......假設你正在將該文件作爲腳本運行。你可以展示你用來做這件事的代碼嗎?我相信那是你的問題。

我懷疑你對運行腳本時工作目錄的改變方式做出了錯誤的假設。它沒有。你正在列出相對路徑,所以瞭解它們相對於什麼是重要的。這是複製和粘貼時最有可能工作的原因......您正在從不同的工作目錄執行。

+0

當我複製並粘貼它時,我在與正在運行的腳本相同的位置執行此操作。如果有幫助,我已經編輯了一些更多信息的原始文章。 – dtam

地板
0
0

我是新來的bash腳本,並基於我見過的另一個建立我的腳本。我簡單地調用存儲已命令變量「運行」命令:

$cmd 

解決使用:

eval $cmd 

代替。我的不好,應該從一開始就給出完整的腳本。

0
votes
answers
4 views
+10

從舊的文件夾中刪除文件

0

我需要刪除14天以前的文件。從舊的文件夾中刪除文件

CMD中:

find ${FILES_DIR}/*.zip -mindepth 1 -mtime +14 -delete 

這工作得很好。但是,如果文件夾中沒有zip文件,該怎麼辦?這是拋出一個錯誤。如何處理案件?

+0

你所說的「拋出一個錯誤」虛假的錯誤信息在這種情況下的意思。?將標準錯誤重定向到'/ dev/null'。 –

沙发
0
1

第一個參數是從哪裏開始搜索。 名的文件名,模式與-name '<pattern> 給您應該使用

find ${FILES_DIR} -name '*.zip' -mtime +14 -delete

在表單中的find得到起點的名單,但沒有任何搜索。

-mindepth 1不到風度似乎有效果。也許你想用-maxdepth 1來限制搜索到提到的目錄,沒有別的。 (把它放在-name之前避免警告

您可以考慮使用-ls -delete - 至少你可以看到已被刪除