在多年的Windows脚本编写之后学习shell脚本。我有一个运行在TrueNAS 12.2监狱的qBittorrent-nox。qBittorrent提供了在torrent下载完成后运行命令的功能。我想调用一个shell脚本,在作为参数传递的文件夹上运行两个chown命令。文件夹将包含空格,并且可能包含&号,因此shell脚本将失败。根据qBittorrent的日志文件传入的命令如下:
bash /mnt/torrents/Live/fixperms.sh "Name of the folder & description of contents"这是我期望工作的代码:
#!/usr/local/bin/bash
chown -R 1001:1006 $(printf "%q" "$1")命令的格式正确,但脚本在拆分字符串时失败。如果我回显并手动执行它,它创建的命令就可以工作。我找不到一种方法使任何shell (csh、sh、zsh和bash)不在空格处拆分字符串。我试过用单引号,双引号和反引号。
我已经在这上面花了几个小时,但我没有取得任何进展。我已经尝试了所有四个shell,zsh拆分了双引号字符串,而文档说它不应该拆分,参数扩展在bash中有效,但仍然拆分字符串。我没有python或perl,如果可以避免的话,我不希望安装它们。
我遗漏了什么?
Bash为5.0.18,zsh为5.8,tcsh为6.2.00
发布于 2020-12-11 23:13:33
您可以执行以下操作
VAR="Name of the folder & description of contents"; bash /mnt/torrents/Live/fixperms.sh "$VAR"然后使用其中的空格来处理该字符串。如果你举个例子,在狂欢中这样做,它是有效的:
user@server:~$ VAR="test is test"
user@server:~$ ./test2.sh "$VAR"
test is testso只包含一个echo $1,因此您可以在以后使用整个字符串,如下所示
#!/usr/local/bin/bash
chown -R 1001:1006 $(printf "%q" "$1")https://stackoverflow.com/questions/65143501
复制相似问题