【问题标题】:Passing Path to Bash Script, Shorthand notation [duplicate]将路径传递给 Bash 脚本,速记符号 [重复]
【发布时间】:2018-10-06 12:42:30
【问题描述】:

我不确定是否有人提出或回答了这个问题。如果有,我道歉。我不太确定要查找什么,但我正在编写一个 bash 脚本来获取用户的路径,我的脚本适用于绝对路径和相对路径。但我想知道是否有办法解释这些路径的速记符号。例如 ~/ 代表家庭或 .用于当前或 ../ 用于向上的目录。我在弄清楚这一点时遇到了一些麻烦。这是我当前的 bash 脚本供参考。

#!/bin/bash

echo "What is the path you'd like me to search?"

read PASSED

while [ ! -d $PASSED ]; do
    echo "$PASSED is not a valid directory"
    echo "Please provide a valid Path"
    read PASSED
done

ls -l $PASSED | awk -v user=`whoami` '{ if($3 == user){print $0}}'

【问题讨论】:

  • 您能否阐明您的愿望,即“一种解释这些路径的速记符号的方法”?你到底想做什么?
  • 我希望能够通过 ~/some/path 或 ../some/path 并让我的脚本将其正确解释为路径。因为截至目前,它不理解 ~/some/path 作为路径
  • .. 是您可以直接访问的实际文件名。 ~ 是 shell 语法,你必须添加对它的支持
  • 添加对 ~/ 的支持的好方法是什么?

标签: bash


【解决方案1】:

... 不是快捷方式,它们是存在于每个目录中的实际目录名称。你不需要做任何事情来支持这一点。

但是,~ 是您可以模拟的 bash 语法。

在最简单的情况下,只需检查前导 ~ 并替换:

# Read some path
printf 'Enter a path: '
IFS='' read -r mypath

# If the path starts with ~, replace it with $HOME
[[ $mypath = '~'* ]] && mypath="$HOME${mypath#'~'}"

# Show what we got
echo "The path is $mypath, aka $(realpath "$mypath")"

请注意,这不支持各种其他 ~ 语法,例如 ~username~+

【讨论】:

  • 好的,谢谢,对..和..的误解深表歉意
猜你喜欢
  • 2021-09-11
  • 1970-01-01
  • 1970-01-01
  • 2014-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-12
相关资源
最近更新 更多