NixOS下用Bash自动切换壁纸时出现"No such file or dir"错误
解决Bash脚本中swww无法找到带空格壁纸文件的问题
问题原因
你的脚本中swww img "$Wallpaper_Dir'$chosen'"这一行写法错误,导致传递给swww的路径包含多余的单引号。比如当选中Chill Study.jpg时,实际传递的路径是~/.config/hypr/Wallpapers/'Chill Study.jpg',但真实文件路径是~/.config/hypr/Wallpapers/Chill Study.jpg——多出来的单引号让系统认为这是文件名的一部分,自然找不到对应文件。
你用echo输出的结果看起来像是正确的shell命令,但那只是字符串输出,并不是Bash实际传递给swww的参数内容。
修正方案
正确拼接路径:直接用双引号包裹完整的路径变量拼接结果,就能正确处理文件名中的空格:
swww img "$Wallpaper_Dir$chosen"替换ls为find(可选但更可靠):用
ls传递文件名给rofi存在风险(比如文件名含换行符、特殊字符时会出错),改用find命令更安全:chosen=$(find "$Wallpaper_Dir" -maxdepth 1 -type f ! -name 'Best Wallpapers.md' -printf '%f\n' | rofi -dmenu -i)确保路径正确展开:如果脚本中用
~表示家目录,建议替换为$HOME,避免双引号中~无法展开的问题:Wallpaper_Dir="$HOME/.config/hypr/Wallpapers/"
完整修正后的脚本
#!/usr/bin/env bash Wallpaper_Dir="$HOME/.config/hypr/Wallpapers/" chosen=$(find "$Wallpaper_Dir" -maxdepth 1 -type f ! -name 'Best Wallpapers.md' -printf '%f\n' | rofi -dmenu -i) swww img "$Wallpaper_Dir$chosen"
内容的提问来源于stack exchange,提问作者Ethan
相关产品推荐
相关产品推荐

