use*_*991 14 directory bash path dirname
我的剧本:
#!/usr/bin/env bash
PATH=/home/user/example/foo/bar
mkdir -p /tmp/backup$PATH
Run Code Online (Sandbox Code Playgroud)
现在我想获得"$ PATH"的第一个文件夹:/ home /
cd /tmp/backup
rm -rf ./home/
cd - > /dev/null
Run Code Online (Sandbox Code Playgroud)
如何像上面的示例一样始终检测第一个文件夹?"dirname $ PATH"只返回"/ home/user/example/foo /".
提前致谢!:)
use*_*991 21
我找到了一个解决方案:
#/usr/bin/env bash
DIRECTORY="/home/user/example/foo/bar"
BASE_DIRECTORY=$(echo "$DIRECTORY" | cut -d "/" -f2)
echo "#$BASE_DIRECTORY#";
Run Code Online (Sandbox Code Playgroud)
这将始终返回第一个目录.在此示例中,它将返回以下内容:
#home#
Run Code Online (Sandbox Code Playgroud)
感谢@condorwasabi对awk的想法!:)
你可以尝试这个 awk 命令:
basedirectory=$(echo "$PATH" | awk -F "/" '{print $2}')
Run Code Online (Sandbox Code Playgroud)
此时basedirectory将是字符串home
然后你写:
rm -rf ./"$basedirectory"/
Run Code Online (Sandbox Code Playgroud)
如果PATH总是有一个绝对形式你可以做的伎俩
ROOT=${PATH#/} ROOT=/${ROOT%%/*}
Run Code Online (Sandbox Code Playgroud)
要么
IFS=/ read -ra T <<< "$PATH"
ROOT=/${T[1]}
Run Code Online (Sandbox Code Playgroud)
但是我还应该补充说,最好使用其他变量而不是使用,PATH因为它会改变你的二进制文件的搜索目录,除非你真的打算这样做.
您也可以通过readlink -f或选择将路径转换为绝对形式readlink -m:
ABS=$(readlink -m "$PATH")
Run Code Online (Sandbox Code Playgroud)
你也可以参考我的函数getabspath.
| 归档时间: |
|
| 查看次数: |
34412 次 |
| 最近记录: |