簡體   English   中英

在bash shell腳本中檢查目錄的問題

[英]problems with checking for a directory in bash shell script

我正在編寫一個批處理腳本bash,需要首先檢查是否存在一個文件夾,以了解是否運行某個將創建和填充該文件夾的python腳本。 我之前做過類似的事情,可以更改目錄並從存儲的變量中查找目錄,但出於某種原因,我只是在這里遺漏了一些東西。

以下是腳本的工作原理。

if [ -d "$net_output" ]
then
    echo "directory exists"
else
    echo "directory does not exist"
fi

當我運行這個腳本時,我通常在該行中回顯$ net_output以查看它將評估的內容。 當腳本運行時,我得到我的其他代碼塊說“目錄不存在”,但是當我將之前回顯的$ net_output目錄路徑復制並粘貼到shell終端時,它會更改目錄就好了,證明該目錄確實存在。 我在戴爾機器上使用Ubuntu 12.04。

提前感謝您提供任何幫助。 讓我知道我可以提供哪些其他信息。

當有人發布這樣的問題時我遇到的最常見的情況如下:

1.變量包含文字引號。 Bash不會遞歸地解析引號,它只解析命令行中給出的“外部”引號。

$ mkdir "/tmp/dir with spaces"
$ var='"/tmp/dir with spaces"'
$ echo "$var"
"/tmp/dir with spaces"
$ [ -d "/tmp/dir with spaces" ]; echo $?
0
$ [ -d "$var" ]; echo $?  # equivalent to [ -d '"/tmp/dir with spaces"' ]
1

2.變量包含相對路徑,當前目錄不是您所期望的。 檢查echo "$PWD"的值是否輸出您的預期。

3.從具有dos行結尾的文件CRLF(\\ r \\ n)讀取變量。 Unix和unix類系統只使用LF(\\ n)作為行結尾。 如果是這種情況,路徑將在末尾包含CR(\\ r)。 一行末尾的CR將在終端中“不可見”。 在調試腳本時檢查printf '%q\\n' "$var" 請參閱BashFAQ 52 ,了解如何擺脫它們。

暫無
暫無

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

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