簡體   English   中英

在 bash 中使用命令的結果作為參數?

[英]Using the result of a command as an argument in bash?

要為文件夾中的所有音樂創建播放列表,我在 bash 中使用以下命令:

ls > list.txt

我想使用pwd命令的結果作為播放列表的名稱。

就像是:

ls > ${pwd}.txt

但這不起作用 - 誰能告訴我我需要使用什么語法來做這樣的事情?

編輯:正如評論中提到的,pwd 最終會給出一個絕對路徑,所以我的播放列表最終會在某個目錄中被命名為.txt - d'oh。 所以我必須修剪路徑。 感謝您發現這一點 - 我可能會花很長時間想知道我的文件去了哪里!

最好的方法是使用"$(command substitution)" (感謝Landon ):

ls > "$(pwd).txt"

您有時還會看到人們使用較舊的反引號表示法,但這在嵌套和 escaping 方面有幾個缺點

ls > "`pwd`.txt"

注意pwd的未處理替換是絕對路徑,所以上面的命令會在與工作目錄相同的目錄下創建一個同名文件,但擴展名為.txt Thomas Kammeyer 指出basename命令會刪除前導目錄,因此這將在當前目錄中創建一個帶有該目錄名稱的文本文件:

ls > "$(basename "$(pwd)").txt"

也感謝 erichui 提出路徑中的空格問題。

這等效於反引號解決方案:

ls > $(pwd).txt

照你說的做,你可以試試:

ls > `pwd`.txt

這將使用完整的路徑名,這應該沒問題。 請注意,如果您在您的主目錄(可能位於 /home/hoboben)中執行此操作,您將嘗試在上面的目錄中創建 /home/hoboben.txt,這是一個文本文件。

這是你想要的嗎?

如果您希望目錄包含一個以它命名的文件,您將獲得當前目錄的基本名稱和 append 與.txt 到 pwd。

現在,與其使用 pwd 命令……為什么不使用 PWD 環境變量呢?

例如:

ls > $PWD.txt

或者

ls > ${PWD}.txt

可能是您在第二個示例中試圖記住的內容。

如果您在 /home/hoboben 並且想要創建 /home/hoboben/hoboben.txt,請嘗試:

ls > ${PWD}/${PWD##*/}.txt

如果您這樣做,該文件將包含其自己的名稱,因此大多數情況下,您可以通過以下幾種方法之一來解決此問題。 只要您不使用 -a 標志(然后可選地重命名生成的文件),您就可以重定向到其他地方並移動文件或以點開頭的文件命名文件以將其隱藏在 ls 命令中。

我編寫自己的腳本來管理音樂文件的目錄層次結構,並使用名為“.info”的子目錄,例如,在一些備用文件中包含曲目數據(基本上,我以這種方式“隱藏”元數據)。 效果很好,因為我的需求很簡單,而且我的收藏很小。

我懷疑問題可能是其中一個目錄名稱中有空格。 例如,如果您的工作目錄是“/home/user/music/artist name”。 Bash 會感到困惑,以為您正在嘗試重定向到 /home/user/music/artist 和 name.txt。 你可以用雙引號解決這個問題

ls > "$(pwd).txt"

此外,您可能不想重定向到 $(pwd).txt。 在上面的示例中,您會將 output 重定向到文件“/home/user/music/artist name.txt”

語法是:

ls > `pwd`.txt

那是 '~' 下面的 '`' 字符,而不是常規的單引號。

使用上述方法將創建比當前目錄高一級的文件。 如果您希望將所有 go 的播放列表放到一個目錄中,您需要執行以下操作:

#!/bin/sh

MYVAR=`pwd | sed "s|/|_|g"`
ls > /playlistdir/$MYVAR-list.txt

剝離除目錄名稱以外的所有內容

ls >/playlistdir/${PWD##/*}.txt

這可能不是您想要的,因為您不知道文件在哪里(除非您更改 ls 命令)

用“_”替換“/”

ls >/playlistdir/${PWD//\//_}.txt

但是播放列表看起來很丑陋,甚至可能不適合選擇 window

因此,這將為您提供一個簡短的可讀名稱和文件內的可用路徑

ext=.mp3 #leave blank for all files
for FILE in "$PWD/*$ext"; do echo "$FILE";done >/playlistdir/${PWD##/*}.txt

暫無
暫無

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

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