我.md
在 GitHub 帐户中托管一个包含几行 Bash 代码行的文件,并希望复制粘贴这些代码行并逐一执行它们,以故意非自动升级软件(网站模块);
这些 Bash 代码行在网站目录上工作,在我的例子中,该目录位于:
$HOME/MEDIUM_DIRECTORY_1/DOMAIN_DIRECTORY/MEDIUM_DIRECTORY_2
。
我不想在 GitHub 中发布实际路径,所以我寻求如何交互询问用户(目前只有我自己,但将来不一定如此)直接在终端中,对于这样的路径。
在我的共享托管环境中,SSH 的用户名非常长且随机,因此jktantttopppazqqqddd
我记住它们或每次从终端复制粘贴它们的效率很低,但其余的路径对我来说很容易记住;这就是我想要的原因迅速的我自己将其"${HOME}"
作为变量扩展,然后将其与路径的其余部分一起存储在变量中——就在复制粘贴并执行 Bash 代码行(我将使用这样的变量)之前。
我尝试使用类似的东西read website_dir
并给出上面的路径,其中${HOME}
是变量扩展"${HOME}"/MEDIUM_DIRECTORY_1/DOMAIN_DIRECTORY/MEDIUM_DIRECTORY_2
,但它没有成果,因为无法在 read 中扩展变量。
我将我想做的事情定义为在终端中逐一复制粘贴和执行文件中的命令之前,有效地创建要使用的路径我寻求最有效的方法来实现这一目标,其中主要必须包括打印长且随机创建的用户名的一些自动化(无需从终端或其他任何地方复制粘贴它,例如echo $HOME
)。
如何解决自动使用用户名创建路径的问题?
更新
这对我有用:
home_dir=$(echo $HOME) &&
read website_dir_relative_path_after_home_dir &&
website_dir="${home_dir}${website_dir_relative_path_after_home_dir}" # Note the lack of spacing between the two ${}${};
请分享您将如何做到这一点。
答案1
$HOME
是一个变量。你不需要一个新的。因此,如果您知道目标目录是$HOME/MEDIUM_DIRECTORY_1/DOMAIN_DIRECTORY/MEDIUM_DIRECTORY_2
,那么这就是脚本中所需的全部内容:
full_path="$HOME/MEDIUM_DIRECTORY_1/DOMAIN_DIRECTORY/MEDIUM_DIRECTORY_2"
例如,考虑这个脚本:
#!/bin/bash
full_path="$HOME/MEDIUM_DIRECTORY_1/DOMAIN_DIRECTORY/MEDIUM_DIRECTORY_2"
echo "Path is: $full_path"
运行给出:
$ foo.sh
Path is: /home/terdon/MEDIUM_DIRECTORY_1/DOMAIN_DIRECTORY/MEDIUM_DIRECTORY_2
正如您所看到的,无需询问$HOME
,默认情况下它已经在您的脚本中可用。
如果您确实需要用户输入,请不要提示!这很容易出错并且令用户烦恼。只需从命令行获取:
full_path="$1"
## rest of the script
然后,您可以使用 调用脚本,然后脚本中的scriptName.sh $HOME/MEDIUM_DIRECTORY_1/DOMAIN_DIRECTORY/MEDIUM_DIRECTORY_2
变量将设置为。$full_path
$HOME/MEDIUM_DIRECTORY_1/DOMAIN_DIRECTORY/MEDIUM_DIRECTORY_2
最后,如果你必须由于一些我无法想象的隐晦原因提示用户,您可以提示输入相对路径。例如:
echo 'Please enter the relative path to the target directory.'
read -p "the path you enter will be assumed to be relative to $HOME: " full_path
echo "You entered: $full_path, moving there now"
cd "$full_path"
echo "We are currently in $PWD"
运行会给出:
$ foo.sh
Please enter the relative path to the target directory.
the path you enter will be assumed to be relative to /home/terdon: foo
You entered: foo, moving there now
We are currently in /home/terdon/foo