我已经编写了附加的bstls.sh
shell 脚本,它使用命令 select 来选择作为参数传递的文件夹中的子文件夹或文件,然后执行 ls 命令。
#! /bin/bash
#Personal version of shell command ls which presents to user the list of files with shell command select
#Usage: bstls.sh folder
#if parameter numbers is different from one, exit
if [ $# -ne 1 ]
then
echo -e "Usage:\n\tbstls folder"
exit 1
fi
PS3='Which element to ls?'
#command sed substitutes blank spaces with £ in file or folder names
#in this way user can select files or folders with blank spaces in between
list="Exit $(ls "$1" | sed 's/ /£/')"
select option in $list
do
if [ "$option" = "Exit" ] #if user selects Exit, then exit the program
then
exit 0
elif [ -n "$option" ] #if name is valid, shows the files inside
then
#reuse sed command to reconvert to original file name
filename=$(echo "$option" | sed 's/£/ /')
ls "$1"/"$filename"
else #if the number of the choice given by user is wrong, exit
echo "Invalid choice ($REPLY)!"
fi
done
我的主要问题是如何在选择选项列表中显示带空格的文件名。例如,如果我有一个文件夹温度带有子文件夹富和文件你好世界在其中,然后启动以下内容
./bstls.sh temp
应该让我从选项中选择
1)Exit
2)foo
3)hello
4)world
(最后两个是分开的)。
现在我要谈谈我真正的问题。我尝试使用 sed 命令转换带有符号 £ 的空格来解决这个问题。
list="Exit $(ls "$1" | sed 's/ /£/')"
这样,带有空格的名称就可以被 select 命令作为一个整体处理。
然后,当我使用 ls 命令时,我再次将符号 £ 更改为空格。
filename=$(echo "$option" | sed 's/£/ /')
所以现在,当启动
./bstls.sh temp
我得到了选择
1)Exit
2)foo
3)hello£world
问题是(最后):有没有办法在选择菜单中输出不带 £ 符号的文件名?
答案1
用一个外壳全局代替ls
:
select option in "Exit" "$1"/*
.
.
.
elif [ -n "$option" ]; then
ls "$option"
else
.
.
.