第一篇文章:)
几天来,一直在寻找和研究这个挑战的答案。我不知道我错过了什么。可能要靠近它才能看到:) 无论如何,继续挑战。下面是我的 .bashrc 文件的一小部分。我正在尝试做的是使用别名(书签 bmp)为我当前的路径添加书签(让这部分工作),然后像 ls 一样以列表形式调用所有书签(使用 lsbmp)。我会使用 pushd / popd 但我希望能够控制我使用的路径以及我使用它的顺序。
我先追求功能,然后再追求外观(正如您将在下面的代码中注意到的那样)。如果我尝试了不同的选项,您还会注意到几个注释掉的行(请原谅混乱)。我将输出粘贴在代码下方。输出的字符串“echo bmp1”是应该运行而不回显的。那是我被阻止了。
最后一件事,如果您可以提供任何建议以使其变得更好或添加其他选项,我也对此持开放态度。
提前感谢您提供或提供的任何帮助。
############################################
# bookmark section:
# list current bookmarked paths
function lsbmpvar {
if [ -z "$bmpcounter" ]
then
bmpcounter=0
bmp=""
echo "bmpcounter is empty"
else
for bmpcount in $bmpcounter
do
bm="$"
bm+="bmp"$bmpcount""
bm1="echo "
echo "${VAR1:="$bm1$bm"}" # <--- printing out what I want to execute / run
(( bmpcount++ ))
# commented out other items attempted below:
# echo $bmpcounter
# bm+="$("bmp"$bmpcount"")"
# echo "$(bm)"
# eval $bm
# echo "$bm1$bm"
# echo `$VAR1`
# bbm=($(bm))
# echo $bbm
# echo "$bmp$bmpcount"
# echo $(echo "bmp"$bmpcount"")
# echo "$bmp"$bmpcount""
done
fi
}
alias lsbmp=lsbmpvar
# bookmark currrent path for later recall
function bookmarkpathvar {
if [ -z "$1" ]
then
echo "# Usage:
# $ bookmarkpath bmp
# $ lsbmp to list all bookmarkpath
# already used bookmarkpath are"
lsbmp
else
lsbmp
# export $1=`pwd`;
let "bmpcounter++"
export $1$bmpcounter=`pwd`;
fi
}
alias bookmarkpath=bookmarkpathvar
############################################
输出
john@debian1:~$ 书签路径 bmp
bmpcounter 为空
john@debian1:~$ cd 0_test/
john@debian1:~/0_test$ 书签路径 bmp
echo $bmp1
john@debian1:~/0_test$ lsbmp
echo $bmp1
john@debian1:~ /0_test$ 回声 $bmp0john@debian1:~/0_test$ echo $bmp1
/home/john
john@debian1:~/0_test$ echo $bmp2
/home/john/0_test
john@debian1:~/0_test$
以下更新(截至 20170615 0117)
ilkkachu(来自下面的评论),感谢您的帮助。
按顺序(并编号)回答您的问题和陈述:
它看起来很奇怪,因为它是一个别名(是我的 .bashrc 文件的一小部分),并且打算在命令行环境中运行(在我的例子中是 gnome-terminal)。我会看看是否可以从问题中删除单词脚本,以免造成混淆(尽管您的帖子可以在脚本中使用)。
我正在尝试做的是使用别名(书签 bmp)为我当前的路径添加书签,然后像 ls 一样以列表形式调用所有书签(使用 lsbmp)(以及 cd(使用 cdbmp)到它们中)。
和 4. 你对 -z 测试和 for 循环的权利。我真的不知道如何应对挑战,而且由于最近的手术和止痛药,我没有充分利用脑力。在你的帖子之后,我意识到并减少了药物,所以我的脑力更高:) 这个故事的寓意是不要药物和代码哈哈
是的,一个数组会并且确实可以很好地工作(感谢您)。我不得不承认,如果没有你的帖子和鼓励,我不会走阵列路线。谢谢你。我会将这些经验和技能添加到我的联系人中。
"alias lsbmp=lsbmpvar" 此别名用于命令行环境(gnome-terminal)。所以别名部分是调用函数所必需的。
你猜对了。请原谅我的别名/脚本混淆。我也应该更好地评论代码。从现在开始我会的。
我采用了您的简单、简洁和雄辩的代码(进行了一些小的调整)并将其添加到我的 .bashrc 文件中。它工作得很好!我已在我最初发布的问题下方附加了完成的代码和输出,以防其他人想要一份副本。
再次感谢,祝您有美好的一天!
更新和最终代码
# list current bookmarked paths
bmp=()
lsbmpvar() {
if [ "${#bmp[@]}" = 0 ] ; then
echo bmp is currently empty
else
i=0
for x in "${bmp[@]}" ; do
echo "bmp$i: $x"
let i++
done
fi
}
bmpadd() {
bmp+=( $(pwd) )
lsbmpvar
}
alias lsbmp=lsbmpvar
alias bmp=bmpadd
# bookmark currrent path for later recall
bookmarkpathvar() {
if [ -z "$1" ]
then
echo "# Usage:
# $ bookmarkpath bmp (to add a bmp#)
# $ lsbmp (to list all bookmarked paths)
# $ cdbmp number (cdbmp 0) to move to that path (bmp0)
# current bookmarked paths are:"
lsbmpvar
else
echo "# current path ( $(pwd) ) is now bookmarked to bmp"${#bmp[@]}"
# current bookmarked paths are:"
bmpadd
fi
}
alias bookmarkpath=bookmarkpathvar
cd_to_bmp() {
if [ -z "$1" ]
then
echo "# Usage:
# $ cdbmp 0
# $ cdbmp number (cdbmp 0) to move to that path (bmp0)
# current bookmarked paths are:"
lsbmpvar
else
echo "# moving to bmp$1 now"
lsbmpvar
cd ${bmp[$1]}
fi
}
alias cdbmp=cd_to_bmp
输出:
john@debian1:~$ bookmarkpath
# Usage:
# $ bookmarkpath bmp (to add a bmp#)
# $ lsbmp (to list all bookmarked paths)
# $ cdbmp number (cdbmp 0) to move to that path (bmp0)
# current bookmarked paths are:
bmp is currently empty
john@debian1:~$ bookmarkpath bmp
# current path ( /home/john ) is now bookmarked to bmp0
# current bookmarked paths are:
bmp0: /home/john
john@debian1:~$ cd 0_test/
john@debian1:~/0_test$ bookmarkpath bmp
# current path ( /home/john/0_test ) is now bookmarked to bmp1
# current bookmarked paths are:
bmp0: /home/john
bmp1: /home/john/0_test
john@debian1:~/0_test$ lsbmp
bmp0: /home/john
bmp1: /home/john/0_test
john@debian1:~/0_test$ cd ${bmp[0]}
john@debian1:~$ pwd
/home/john
john@debian1:~$ cdbmp 1
# moving to bmp1 now
# current bookmarked paths are:
bmp0: /home/john
bmp1: /home/john/0_test
john@debian1:~/0_test$ bookmarkpath
# Usage:
# $ bookmarkpath bmp (to add a bmp#)
# $ lsbmp (to list all bookmarked paths)
# $ cdbmp number (cdbmp 0) to move to that path (bmp0)
# current bookmarked paths are:
bmp0: /home/john
bmp1: /home/john/0_test
john@debian1:~/0_test$