所以我做了几个脚本来帮助自己,但是很明显,在迁移到不同的操作系统(从mint到ubuntu)并安装zsh之后,它们就停止工作了。
这是我的一个例子,叫做'cweb'脚本,它应该让我进入一个特定的目录(通过终端)。但显然$location没有被整个脚本编辑,所以我没有移动目录,有人知道吗?
我承认从那以后我对代码做了一些修改,但是它们并没有像我期望的那样工作。
如果有人能帮我看看。。
我打开终端然后写'cweb'

cweb
What would you like to run?
Press f to frontend, b to backend. [f/b]
f
Reading frontend directory ('frontend_dir') text file..
Work Directory Location Exported.

Moving onto the chosen directory..
There you go!

所以当我输入终端vim~/.zshrc时
我写的
SCRIPTS_DIR=/home/skillz/Desktop/Desktop_Items/Work/Scripts
export PATH="$PATH:$SCRIPTS_DIR"
export SCRIPTS_DIR=$SCRIPTS_DIR/Supporting_Scripts

在脚本路径中,我有一个'cweb'脚本,它是
cweb公司:
#!/bin/zsh
$SCRIPTS_DIR/ask_server
echo "Moving onto the chosen directory.."
cd $location
echo "There you go!"
exec zsh

询问服务器:
#!/bin/zsh
echo "What would you like to run?"
while true; do
  echo "Press f to frontend, b to backend. [f/b]"
  read -k 1 fb
  echo
  case $fb in
    [Ff]* ) zsh $SCRIPTS_DIR/read_frontend_dir && break;;
    [Bb]* ) zsh $SCRIPTS_DIR/read_backend_dir && break;;
    * ) echo "Unrecognized Option."
  esac
done
echo $location

读取前端目录:
#!/bin/zsh
echo "Reading frontend directory ('frontend_dir') text file.."
file=$SCRIPTS_DIR/Dirs/frontend_dir.txt
while IFS= read -r line
do
  location="$line"
done <"$file"
echo "Work Directory Location Exported."

读取后端目录:
#!/bin/zsh
echo "Reading backend directory ('backend_dir') text file.."
file=$SCRIPTS_DIR/Dirs/backend_dir.txt
while IFS= read -r line
do
  location="$line"
done <"$file"
echo "Work Directory Location Exported."

前端目录.txt
/home/skillz/cweb-frontend/

后端目录.txt
/home/skillz/skillz-coding-website/

TL;博士
我运行一个名为CWEB的脚本,它会提示我一个问题。
我可以键入f或b,根据我的设计,它将读取不同的目录并将我传递到该目录。
这个脚本运行得很好,而且所有的脚本都可以一个接一个地运行。但最终cd-ing返回的位置不起作用。
我收到后打印了$location,结果发现它是空的。。
有线索吗?
有人知道为什么它不把我移到“选择的目录”吗?
它确实存在并且cd它工作得很好。

最佳答案

这不起作用,因为read是内置的Bash shell。zsh也有read功能,但工作方式不同。
从Zsh文档中:
-n个
与-c一起,读取光标所在的单词数。使用-l,将读取光标所在字符的索引。注意,命令名是单词1,而不是单词0,当光标位于行的末尾时,它的字符索引是行的长度加1。
例子:

# Zsh:
% read -n 1 tmp
ls
% echo $tmp

% read tmp
ls
% echo $tmp
ls
% read -n 1 tmp
ls sl
% echo $tmp
sl

如果仍要迁移到Zsh,则需要'-k'选项:
-k[数字]
只读一个(或num)字符。所有这些都被分配到名字上,不需要分词。如果存在-q,则忽略此标志。除非存在-u或-p中的一个,否则从终端读取输入。这个选项也可以在zle小部件中使用。
注意,尽管有助记键,这个选项还是读取完整的字符,如果设置了选项MULTIBYTE,它可能包含多个字节。
Bash read manual
Zsh read manual(滚动至阅读)。

09-10 01:13