gpt4 book ai didi

linux - 提示在 bash 脚本中输入,然后在脚本中使用它

转载 作者:太空狗 更新时间:2023-10-29 12:01:43 25 4
gpt4 key购买 nike

OS: Ubuntu 14.04

我是 shell 编程的新手(我没有时间成为专家,因为这是我不打算定期做的事情),但我需要在脚本中做一些事情来为 Rails 应用程序做准备部署。我有以下脚本:

#!/bin/bash
cd ~
sudo ls -l
read -p $'Enter version of Ruby you want to use, ex: 2.1.7\n' rubyv
if [ "$rubyv" = '' ]; then
echo 'You did not enter a Ruby version to use, exiting...'
exit
fi
echo ' You entered '$rubyv
read -rsp $'If this not what you wanted press any key to exit, otherwise, press c to continue\n' -n1 key
if [ "$key" != 'c' ]; then
exit
fi

然后我想通过使用 $rubyv 使用 rvm 安装 Ruby 来继续脚本,例如:

rvm install "$rubyv"

为了测试,我尝试输入我创建的目录名称,然后将其添加到脚本的末尾:

cd "$rubyv"

但是什么也没有发生。我错过了什么?

解决方案:

看起来 cd 命令执行正常,但我没有看到它的原因是当脚本存在时,我返回到 ~,我开始的目录。我通过在脚本末尾执行 ls -l 验证我在我 cd 到的目录中,它确实给了我正确的列表

最佳答案

每个 shell 脚本都在自己的环境中运行。这意味着变量 $rubyv 只存在于脚本中。

目录更改只能在脚本内部完成。一旦该脚本启动,它就会通过 cd ~ 将其环境中的目录更改为您的 HOME。因此,脚本中的所有命令都是从 HOME 执行的,例如 ls -l(顺便说一句,用 sudo 执行 ls 很奇怪在您的主目录中)。

脚本终止后,变量 $rubyv 无效,您将返回到执行脚本的目录。


也可以在当前 shell 中执行脚本,而无需使用点空格点斜杠创建子 shell:

. ./scriptname

那样的话所有的命令都会直接在当前的shell中执行,所以会影响到当前的环境和目录。但是,最好以通常的方式运行帮助脚本(仅通过 ./scriptname)来保护当前环境。

关于linux - 提示在 bash 脚本中输入,然后在脚本中使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33027143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com