调整bash脚本以生成Nautilus-Actions脚本

时间:2014-06-01 09:21:29

标签: bash command-line sh nautilus

我(通过我对Bash的一点知识和对搜索引擎的广泛使用)制作了一个Bash脚本来重新排序大型PDF文件的页面:

#!/bin/bash
file=originalfile.pdf;
newfile=$(basename $file .pdf)-2.pdf;
tmpfile=$(mktemp --suffix=.pdf);
blankfile=$(mktemp --suffix=.pdf);
cp -f $file $newfile;
cp -f $file $tmpfile;
numberofpages=`pdftk $file dump_data | grep "NumberOfPages" | sed 's:.*\([0-9][0-9*]\).*:\1:'`;
echo "" | ps2pdf -sPAPERSIZE=a4 - $blankfile;
while (( $numberofpages % 4 != 0 ));
do 
  ((numberofpages++));
  pdftk A=$newfile B=$blankfile cat A B output $tmpfile;
  cp -f $tmpfile $newfile;
done;
neworder=`
for ((  a=1, b=3, c=4, d=2 ;
        a <=numberofpages ;
        ((a+=4)), ((b+=4)), ((c+=4)), ((d+=4))
    ));
do
echo -n "$a $b $c $d ";
done`;
pdftk $tmpfile cat $neworder output $newfile;

我想制作一个Nautilus-Actions脚本,以便它可以安装&#34;并由普通用户使用。对于普通用户,我的意思是有人无法键入任何命令行,无法按照几个步骤在指定位置复制脚本。

不幸的是,脚本没有用,我想出了这个新脚本,感谢下面评论的人的帮助:

#!/bin/bash
file=originalfile.pdf;
newfile=$(basename $file .pdf)-2.pdf;
tmpfile=$(mktemp --suffix=.pdf);
blankfile=$(mktemp --suffix=.pdf);
cp -f $file $newfile;
cp -f $file $tmpfile;
numberofpages=`pdftk $file dump_data | grep "NumberOfPages" | sed 's:.*\([0-9][0-9*]\).*:\1:'`;
echo "" | ps2pdf -sPAPERSIZE=a4 - $blankfile;
while (( $numberofpages % 4 != 0 )); # NOTE: replace % by %% in Nautilus-Actions
do 
  ((numberofpages++));
  pdftk A=$newfile B=$blankfile cat A B output $tmpfile;
  cp -f $tmpfile $newfile;
done;
a=0;
neworder=$(
  while [ $a -lt $numberofpages ];
  do 
    echo -n "$(($a + 1)) $(($a + 3)) $(($a + 4)) $(($a + 2)) ";
    ((a+=4));
  done;
);
pdftk $tmpfile cat $neworder output $newfile;

我确实将所有内容都粘贴在Nautilus-Actions的Path条目中,并且最终有效。然后可以将新创建​​的Nautilus操作导出到.desktop文件中(因此很容易被任何用户导入):

Screenshot of Nautilus-Actions

如果我要求Nautilus-Actions显示输出,Nautilus-Actions似乎在/bin/sh -c 'myscript...'命令中执行命令行。

你能解释一下为什么我要改变这么多东西才能使它发挥作用吗?特别是为什么我必须将for更改为while

注意:我完全改变了这个问题,因为它很乱。

0 个答案:

没有答案