问题描述
好基友突然问我:浩哥,怎么用shell脚本进入一个文件夹下已经排好序的所以文件夹里面,最后一个或者第一个文件夹???
比如,我/jack下面有demo、hhit、logs文件夹,我想通过lt排序,直接cd到第一个文件夹里面。
解决方案
新建一个cd.sh
脚本,输入以下代码。
#!/bin/bash
# 顺序获取/jack下面所有的文件,=号左右两边不要有空格
dir=$(ls -lt /jack/ | awk '/^d/ {print $NF}')
# 循环每个文件
for i in $dir
do
# 输出每个文件夹名,do里面不可为空,赋值语句也可。
echo $i
done
# 将字符串转换成数组-根据空格
arr=(${dir//A/})
# 数组--输出数组最后一个元素
echo ${arr[${#arr[@]}-1]}
# 数组--进入第一个文件夹
cd ${arr[0]}
# for循环--进入最后一个文件夹
# cd $i
# for循环,或者数组用一个即可。
运行问题
直接使用./
运行是不行的。
以这种方法执行脚本时,其中的命令是fork一个子shell线程执行的。
子shell线程继承了父shell的环境变量,
但无法修改他们,所做的修改仅对子shell有效。
这时候我们需要使用source