我正在尝试创建一个脚本,简化在iOS设备上创建新用户的过程.以下是分解的步骤.
# fullname="USER INPUT"
# user="USER INPUT"
# group=$user
# uid=1000
# gid=1000
# home=/var/$user
# echo "$group:*:$gid:$user" >> /private/etc/group
# echo "$user::$uid:$gid::0:0:$fullname:$home:/bin/sh" >> /private/etc/master.passwd
# passwd $user
# mkdir $home
# chown $user:$group $home
Run Code Online (Sandbox Code Playgroud)
如您所见,某些字段需要输入.如何在脚本中请求变量的输入?
因为Mountain Lion仍然使用旧的bash 3.x,我想知道是否有一个很好的教程(或者如果有人可以在这里发布一个)如何将bash升级到最新版本.此外,知道如何设置路径以便可以在终端中使用它将会很有帮助.
提前致谢
我有一个bash脚本,可以在我的工作Ubuntu机器上正常工作,但是当我尝试在我的Mac OSX Lion Mountain Lion笔记本电脑上运行它时,可悲地打破了.杀死它的线是这样的:
while [[ -z "$SSHFS_PATH" ]] ; do
read -e -p "Please enter the path on which to mount your file system: `echo -e $'\n > '`" -i "~/aws-dev" SSHFS_PATH;
done
Run Code Online (Sandbox Code Playgroud)
它抛出了这个错误:
-bash: read: -i: invalid option
read: usage: read [-ers] [-u fd] [-t timeout] [-p prompt] [-a array] [-n nchars] [-d delim] [name ...]
Run Code Online (Sandbox Code Playgroud)
因此,似乎OSX版本的read命令不接受-i,用于建议默认值.为什么?有什么办法可以解决这个问题?
谢谢 :)
任何人都可以告诉我:-这个符号在Unix shell脚本中是什么意思
while [ ${runq:-$SLOTS} -ge $SLOTS ] 在给定的例子中
是否有一些简单的方法如何在提供默认值的同时在 Ruby 中请求用户输入?
考虑 bash 中的这段代码:
function ask_q {
local PROMPT="$1"
local DEF_V="$2"
read -e -p "$PROMPT" -i "$DEF_V" REPLY
echo $REPLY
}
TEST=$(ask_q "Are you hungry?" "Yes")
echo "Answer was \"$TEST\"."
Run Code Online (Sandbox Code Playgroud)
你能用 Ruby 实现类似的行为gets.chomp吗?
function ask_q(prompt, default="")
puts prompt
reply = gets.chomp() # ???
return reply
def
reply = ask_q("Are you hungry?", "Yes")
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过这种方式对 Ruby 中的功能进行排序复制......
def ask_q(prompt, default="")
default_msg = (default.to_s.empty?) ? "" : "[default: \"#{default}\"]"
puts "${prompt} ${default}"
reply = gets.chomp()
reply = (default.to_s.empty?) ? …Run Code Online (Sandbox Code Playgroud) 我有一个正在读取用户输入的脚本。这是我的代码:
if [ -z $volreadexists ]; then
echo -e "\tThis will overwrite the entire volume (/dev/vg01/$myhost)...are you sure?"
read REPLY
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
echo -e "\t\tContinuing"
syncvolume
else
echo "Fine...skipping"
fi
fi
Run Code Online (Sandbox Code Playgroud)
我必须使用,read REPLY因为read它本身不插入选项卡。我正在寻找类似的东西:
read -p "\tDoes this look OK? (n for No)" -n 1 -r
Run Code Online (Sandbox Code Playgroud)
\t在阅读提示上按 Tab 键。
如何向阅读提示添加选项卡?
更新:感谢@gniourf 的精彩回答!:
read -p $'\tDoes this look OK? (n for No)' -n 1 -r
Run Code Online (Sandbox Code Playgroud)
然而,我发现了一个问题。当我尝试在那里使用变量时,它不会翻译它:
read -p $'\tThis will overwrite …Run Code Online (Sandbox Code Playgroud)