2014-12-03 64 views
0

這可能很基本,但我花了整整一天找到一個沒有太多成功的答案。輸出到腳本目錄中的文件

我必須駐留在~/Desktop/shell/myScript.sh

我想單行命令來運行從我的終端這個腳本輸出到同一個目錄中的新目錄,腳本所在不管我現在的工作可執行腳本目錄是。

我所用:

mkdir -p tmp && 
    ./Desktop/shell/myScript.sh|grep '18x18'|cut -d":" -f1 > tmp/myList.txt 

但它會在當前工作目錄中新的目錄,而不是在目標位置。

任何幫助,將不勝感激。

謝謝!

+2

沒有修改如何運行'mkdir -p tmp && someScript'並讓'somescript'影響目錄的創建位置。你可以重寫腳本,以便你可以運行'somescript tmp/myList.txt',並讓腳本[查找它的目錄](http://stackoverflow.com/questions/59895/can-a-bash-script-告訴什麼目錄存儲在)並寫入文件。 – 2014-12-03 00:15:23

+0

感謝您的回覆。讓我們忽略mkdir部分,只輸出腳本目錄而不是當前的工作目錄,我的選擇是什麼? – 2014-12-03 00:24:24

+0

同樣沒有辦法運行'somescript> tmp/myList.txt'並讓'somescript'影響寫入文件的位置。如前所述,您可以重寫腳本,以便運行'somescript tmp/myList.txt',然後將例如'echo my text>「/ my/dir/$ 1」'寫入'/ my/dir/tmp/myList.txt' – 2014-12-03 00:31:52

回答

1

你可以解決它在一個行,如果你預先定義的變量:

export LOC=$HOME/Desktop/shell 

那麼你可以說

mkdir -p $LOC/tmp && $LOC/myScript.sh | grep '18x18' | cut -d":" -f1 > $LOC/tmp/myList.txt 

但是,如果你這樣做反覆它可能是更好的長期-term包裝myScript.sh,以便它創建目錄併爲您重定向輸出。參數grepcut以及輸出文件名將作爲命令行參數和選項傳遞給包裝器。

1

如何:

SCRIPTDIR="./Desktop/shell/" ; mkdir "$SCRIPTDIR/tmp" ; "$SCRIPTDIR/myScript.sh" | grep '18x18' | cut -d ":" -f 1 > "$SCRIPTDIR/tmp/myList.txt" 

在你的情況,你必須給腳本路徑反正。如果您將腳本放在自動搜索的路徑中,例如$HOME/bin,你可以輸入myScript.sh而不用目錄前綴,你可以使用SCRIPTDIR=$(dirname $(which myScript.sh))

將目錄與二進制文件和數據文件混合通常是一個壞主意。對於臨時文件/tmp是去的地方。請考慮您的腳本可能會成名並由管理員在/usr/bin中安裝,並由多人同時運行。出於這個原因,試着想想mktemp

1

腳本可以爲你做這個帶的一些代碼

而是通過命令行手工做這個的,誰知道在那裏你會移動你的腳本,並把它。使用目錄名

script_directory=`dirname $0` 

上面的代碼會發現你的腳本目錄,並將它保存在一個變量中添加以下代碼

[1]尋找你的腳本目錄位置。

[2]在您的腳本目錄

mkdir "$script_directory/tmp 2> /dev/null" 

上面的代碼會讓你的腳本目錄下名爲「TMP」目錄下創建「TMP」的文件夾。如果該目錄存在,mkdir將不會使用此命令行覆蓋任何現有目錄併發出錯誤。我用「2>的/ dev/null的」隱藏所有錯誤

[3]打開你的腳本,並使用「剪切」,然後將輸出重定向到一個新的文件

cat "$0"|grep '18x18'|cut -d":" -f1 > "$script_directory"/tmp/myList.txt 
相關問題