如何提示用户输入名称来创建文件夹(bash | shell脚本)?

pat*_*ick 5 macos bash shell directory-structure

首先,这是我第一次使用shell脚本.我只有HTML和CSS的经验:]

我想要做的是设置一个简单的文件夹结构,在对话框中提示用户设置根文件夹的名称.我将通过OS X服务或Keyboard Maestro热键触发此shell脚本.

这是我到目前为止所提出的:

#!/bin/sh

echo -n "Enter the project name:"
read -e NAME  

mkdir -p ~/Desktop/$NAME
mkdir -p ~/Desktop/$NAME/subfolder1
mkdir -p ~/Desktop/$NAME/subfolder2
Run Code Online (Sandbox Code Playgroud)

显然有一些错误 - 变量不会被传递,并且不会创建根文件夹.我还读到我应该使用"对话框"来询问输入,但我无法写出有效的东西.

非常感谢您的帮助.谢谢.

Gor*_*son 10

echoread命令通过文本界面,如脚本运行的终端窗口里工作.如果你运行在OS X服务的脚本,有没有类似于终端的界面,所以无论命令执行任何有用的东西.(我不知道Keyboard Maestro,但我认为它类似.)从这种情况进行交互的最简单方法通常是通过osascript命令使用AppleScript :

name="$(osascript -e 'Tell application "System Events" to display dialog "Enter the project name:" default answer ""' -e 'text returned of result' 2>/dev/null)"
if [ $? -ne 0 ]; then
    # The user pressed Cancel
    exit 1 # exit with an error status
elif [ -z "$name" ]; then
    # The user left the project name blank
    osascript -e 'Tell application "System Events" to display alert "You must enter a project name; cancelling..." as warning'
    exit 1 # exit with an error status
fi

mkdir -p ~/Desktop/$name
mkdir -p ~/Desktop/$name/subfolder1
mkdir -p ~/Desktop/$name/subfolder2
Run Code Online (Sandbox Code Playgroud)

(注意:我更喜欢在shell中使用小写变量名,以避免与特殊变量(如PATH等)发生冲突...)