我有一个脚本,我基本上已经完成了,除了一个问题,我似乎无法在将换行符传递给 zbarimg 之前将其删除。我在网上尝试了各种东西,似乎找不到任何东西来摆脱这个讨厌的角色。任何帮助将不胜感激。
#!/bin/bash
folder=~/Public
cdate=$(date +"%Y-%m-%d-%H:%M")
inotifywait -m -q -e create -r --format '%:e %w%f' $folder | while read file
do
ifile=$(ls -Art ~/Public | tail -n 1)
ifile2=$(echo $ifile | tr 'n' ' ')
echo $ifile2 >> /tmp/latest.txt
zbarimg $ifile2 | pluma
done
ls -alrt 的输出(最后几行(
-rw-r--r-- 1 mintux mintux 875988 Nov 11 12:42 20151111_114942.jpg
-rw-r--r-- 1 mintux mintux 801317 Nov 11 12:45 20151111_114759(2).jpg
-rw-r--r-- 1 mintux mintux 875988 Nov 11 12:45 20151111_114942(2).jpg
-rw-r--r-- 1 mintux mintux 911 Nov 23 23:24 nov23.png
-rw-r--r-- 1 mintux mintux 23158 Nov 23 23:43 nov23a.png
drwxr-xr-x 73 mintux mintux 24576 Nov 24 08:42 ..
drwxr-xr-x 4 mintux mintux 4096 Nov 24 12:10 .
你的问题有点不清楚,但在下面的脚本中,ifile
或ifile2
的末尾都没有newline
('n'
(。虽然很难准确确定您尝试根除的newline
,但您的目标似乎是防止在将$ifile2
重定向到文件后将newline
写入/tmp/latest.txt
。(这是唯一可以想象的争议newline
(整个交易中唯一涉及的newline
是echo
本身放在那里的newline
:
#!/bin/bash
folder=~/Public
cdate=$(date +"%Y-%m-%d-%H:%M")
inotifywait -m -q -e create -r --format '%:e %w%f' $folder | while read file
do
ifile=$(ls -Art ~/Public | tail -n 1)
ifile2=$(echo $ifile | tr 'n' ' ')
echo $ifile2 >> /tmp/latest.txt
zbarimg $ifile2 | pluma
done
如果你不想newline
写入/tmp/latest.txt
,那么使用echo -n
或printf
,例如:
#!/bin/bash
folder=~/Public
cdate=$(date +"%Y-%m-%d-%H:%M")
inotifywait -m -q -e create -r --format '%:e %w%f' "$folder" | while read -r file
do
ifile=$(ls -Art ~/Public | tail -n 1)
echo -n "$ifile" >> /tmp/latest.txt # or printf "%s" "$ifile"
zbarimg "$ifile" | pluma
done
注意:您可以通过以下方式证明自己没有换行符:
echo "'$ifile'"
注意2:在bash中,除非在[[...]]
内部,否则您应该始终引用变量。(如果你不记得[[...]]
,那么总是引用你的变量(。此外,使用ls
(任何排序顺序(填充变量ifile
容易受到许多细微的文件名错误(文件名中的换行符等(的影响。请参阅 Bash 陷阱 有关尝试迭代ls
返回所涉及的相关原因。
"当我在脚本之外手动运行它时,它可以很好地打开它 但抛出有关无法从 in 打开文件的错误 它"。
好吧,这更有意义。在"$folder"
中查找最新文件而不使用解析ls
时固有的 pitfal 的一种方法是:
#!/bin/bash
folder=~/Public
cdate=$(date +"%Y-%m-%d-%H:%M")
inotifywait -m -q -e create -r --format '%:e %w%f' "$folder" | while read -r file
unset -v ifile
for fname in "$folder"/*; do
[[ $fname -nt $ifile ]] && ifile="$fname"
done
zbarimg "$ifile" | pluma
试一试,让我知道是否可以解决问题。
因此,在所有这些之后,事实证明真正的问题是我只是忘记将文件夹附加到文件名中,因此zbarimg无法打开文件的原因与换行符无关,就像我认为这里基本上是修复它的原因:
zbarimg $folder/$ifile2
再次感谢所有提供帮助的人,对不起我的无能,愿互联网的祝福和宽恕降临到我身上:)