我是使用 zsh 并使用 ranger 作为文件管理器的 Manjaro Linux 的新手。似乎该脚本在更新之前正在运行,但不确定它是否完全相关。
脚本 (shortcuts.sh) 读取包含特定文件夹路径列表的文件 (.key_directories)。每行包含几个字母和一个目录路径,即 2 列:
例子:
md /run/media/
mov /run/media/movies
docs /run/media/docs
然后添加一点文本,这取决于列表最终将在哪个文件中。将用作 bashrc 和 zshrc 别名列表的文本文件 (.shortcuts) 或文本文件 (shortcuts.conf)游侠文件管理器将使用它作为不同文件夹的路径列表。
该脚本运行良好,直到它没有。我不确定问题出在哪里。
这是完整的脚本 shorcuts.sh:
#!/bin/bash
# Shell rc file (i.e. bash vs. zsh, etc.)
shellrc="$HOME/.zshrc"
bshellrc="$HOME/.bashrc"
# Config locations
folders="$HOME/.config/ranger/.key_directories"
configs="$HOME/.config/ranger/.key_files"
# Output locations
shell_shortcuts="$HOME/.shortcuts"
ranger_shortcuts="$HOME/.config/ranger/shortcuts.conf"
# Remove
rm -f "$ranger_shortcuts" 2>/dev/null
echo "alias \\" > "$shell_shortcuts"
# Ensure text of argument 1 exists in the file argument 2
ensure() { (grep "$1" "$2")>/dev/null 2>&1 || echo "$1" >> "$2" ;}
ensure "source $shell_shortcuts" "$shellrc"
ensure "source $shell_shortcuts" "$bshellrc"
ensure "source $HOME/.config/ranger/shortcuts.conf" "$HOME/.config/ranger/rc.conf"
# Format the `folders` file in the correct syntax and sent it to all three configs.
sed "s/#.*$//;/^$/d" "$folders" | tee >(awk '{print $1"=\"cd "$2" && ls -a\" \\"}' >> "$shell_shortcuts") \
| awk '{print "map g"$1" cd "$2"\nmap t"$1" tab_new "$2"\nmap m"$1" shell mv -v %s "$2"\nmap Y"$1" shell cp -rv %s "$2}' >> "$ranger_shortcuts"
# Format the `configs` file in the correct syntax and sent it to both configs.
sed "s/#.*$//;/^$/d" "$configs" | tee >(awk '{print $1"=\"$EDITOR "$2"\" \\"}' >> "$shell_shortcuts") \
| awk '{print "map "$1" shell $EDITOR "$2}' >> "$ranger_shortcuts"
这是 .key_directories 内容:
# add here the path to your directories
md /run/media/
mov /run/media/movies
docs /run/media/docs
我得到的错误是:
shortcuts.sh: line 28: syntax error unexpected token `('
shortcuts.sh: line 28: sed "s/#.*$//;/^$/d" "$folders" | tee >(awk '{print $1"=\"cd "$2" && ls -a\" \\"}' >> "$shell_shortcuts") \
该脚本应该使用文本文件 .key_directories,忽略以 # 开头的行和空行。然后在每一行添加必要的文本并使用结果创建一个新文件。
示例:.key_directory
md /run/media
该脚本使用此内容创建一个文本文件 .shortcuts
alias \
md = cd /run/media
然后脚本创建一个包含以下内容的文本文件 shortcuts.conf:
map gmd cd /run/media
map tmd tab_new /run/media
map mmd shell mv -v %s /run/media
map Ymd shell cp -rc %s /run/media
到目前为止,我已经仔细检查了是否有额外或缺失的空格。还尝试用双引号交换单引号并删除它们。但是没有什么真正起作用,我已经花了几个小时试图理解 sed、tee 和 awk 是如何单独工作的,并结合了一堆示例,但我仍然无法弄清楚为什么脚本停止工作以及如何修复。
如果有人可以提供帮助,那就太棒了。先感谢您。
编辑:bash 版本 5.0.7 / ZSH 版本 5.7.1