Sha*_*rin 8 command-line scripts
我创建可执行脚本的代码
touch script.sh && echo "echo 'Hello World'" > script.sh && sudo chmod +x script.sh
Run Code Online (Sandbox Code Playgroud)
del*_*tab 20
该install命令(GNU的一部分的coreutils沿cp,mv,rm,等)可以复制一个文件,同时还设置了所有权和权限以及创建父目录是必要的。默认情况下,它将使新文件可执行。它不理解 ' -' 但/dev/stdin可以改用:
install /dev/stdin script.sh <<< "echo Hello World"
Run Code Online (Sandbox Code Playgroud)
上面使用' here string ' 来提供stdin 上的文本,这比管道输入要短一些。参数echo不需要引用,除非它们包含具有特殊含义的字符。
des*_*ert 18
您可以省略整个touch命令,而无需使用sudo. 要进一步缩短命令行,您可以使用bashHistory Expansion第二次保存文件名,并省略不必要的空格:
echo "echo 'Hello World'" >script.sh&&chmod +x !#:3
Run Code Online (Sandbox Code Playgroud)
History Expansion 替换!#:3为当前命令行中的第四个单词,在您的情况下是 filename script.sh。当然,如果您修改第一个命令,则需要对此进行调整,例如:
>script.sh echo "echo 'Hello World'"&&chmod +x !#:1
Run Code Online (Sandbox Code Playgroud)
请注意,有效的脚本需要shebang:
>script.sh echo -e "#!/bin/bash\necho 'Hello World'"&&chmod +x !#:1
Run Code Online (Sandbox Code Playgroud)
如果您更频繁地需要此命令链,我建议您定义一个函数,这样您只需要键入函数名称。一种类似的适应性 - 虽然更长 - 方式是使用保存文件名的变量:
f=script.sh;>$f echo "echo 'Hello World'"&&chmod +x $f
Run Code Online (Sandbox Code Playgroud)
如果您的文件名包含特殊字符,请不要忘记正确引用它们。
我更喜欢cat用于这样的任务:
cat > script.sh && chmod +x script.sh
#!/bin/sh
echo 'Hello World'Enter
Ctrl+D