有没有办法创建一个脚本并用更少的代码使其可执行?

有没有办法创建一个脚本并用更少的代码使其可执行?

我的代码创建可执行脚本

touch script.sh && echo "echo 'Hello World'" > script.sh && sudo chmod +x script.sh

答案1

install命令(与cpmvrm等一起属于 GNU coreutils 的一部分)可以复制文件,同时还可以设置其所有权和权限并根据需要创建父目录。默认情况下,它将使新文件可执行。它不理解“ -”,但/dev/stdin可以改用:

install /dev/stdin script.sh <<< "echo Hello World"

上面使用了'这里是字符串' 在 stdin 上提供文本,这比通过管道输入的文本略短。echo除非参数包含具有特殊含义的字符,否则不需要引用。

答案2

您可以省略整个touch命令,无需使用sudo。要进一步缩短命令行,您可以使用bash历史扩展第二次保存文件名,并省略不必要的空格:

echo "echo 'Hello World'" >script.sh&&chmod +x !#:3

历史扩展!#:3用当前命令行中的第四个单词替换,在你的情况下是文件名script.sh。当然,如果你修改了第一个命令,则需要进行调整,例如:

>script.sh echo "echo 'Hello World'"&&chmod +x !#:1

请注意,有效的脚本需要舍邦

>script.sh echo -e "#!/bin/bash\necho 'Hello World'"&&chmod +x !#:1

如果你更频繁地需要这个命令链,我建议定义函数,这样你只需要输入函数名称。一个同样适用但更长的方法是使用一个保存文件名的变量:

f=script.sh;>$f echo "echo 'Hello World'"&&chmod +x $f

如果你的文件名包含特殊字符,请不要忘记正确引用他们

答案3

我更喜欢使用cat这样的任务:

cat > script.sh && chmod +x script.sh
#!/bin/sh
echo 'Hello World'Enter
Ctrl+D

答案4

您还可以省略整个 chmod,并在 echo 之前使用 umask。应该可以为您节省一些字节。只要您使用每个 shell(主要是 bourne 和 C)都能理解的命令,Shebang 就是可选的。

相关内容