我已在zsh
中定义了此功能,但它无法在我的计算机上运行。
function m() {
local path=/Users/james/Music/cloud_music_link
local cmd="ls $path | sed -n $1p"
echo `$cmd`
# afplay `$cmd`
}
总是说:
m:3:没有这样的文件或目录:ls / Users / james / Music / cloud_music_link | sed -n 10p
当我复制ls /Users/james/Music/cloud_music_link | sed -n 10p
并在zsh
中运行时,一切正常,为什么会发生这种情况?
文件夹cloud_music_link
是一个软链接,我不确定这是否重要。
答案 0 :(得分:1)
您希望先将给定目录内某个位置的文件(或子目录)传递给echo
,然后传递给aplay
?以与bash和zsh兼容的方式轻松完成:
m() {
local num=${1:-1}
local dir=/Users/james/Music/cloud_music_link
local -a files=( "$dir"/* )
local file=${files[$(( num - 1 ))]}
echo "$file"
afplay "$file" &
}
请参阅:
答案 1 :(得分:0)
最后我已经弄明白了,这是因为变量path
的名称,我将其更改为p
,一切正常。名称path
将与zsh
冲突。
此代码有效:
function m() {
local p=/Users/james/Music/cloud_music_link/
song="$(ls $p | sed -n $1p)"
echo $song
killall afplay
afplay "$p$song"&
}