Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将bash参数作为字符串传递_Bash - Fatal编程技术网

将bash参数作为字符串传递

将bash参数作为字符串传递,bash,Bash,我有一个小问题,可能是非常愚蠢的问题 我试图为tar和gzip创建一个别名,它使用给定的文件名作为参数,但它没有按照预期转换为输出中的文件名 我的别名是: alias targz='tar -cvzf $1.tar.gz $1' 它可以工作,但是$1中存储的参数在设置文件名时不起作用,它将其压缩到一个名为.tar.gz的文件中 我试着回显“$1.tar.gz”,输出是“.tar.gz”,所以,我认为它的格式应该非常愚蠢 欢迎提供任何帮助,使用别名为其创建函数,例如: alias targz=

我有一个小问题,可能是非常愚蠢的问题

我试图为tar和gzip创建一个别名,它使用给定的文件名作为参数,但它没有按照预期转换为输出中的文件名

我的别名是:

alias targz='tar -cvzf $1.tar.gz $1'
它可以工作,但是$1中存储的参数在设置文件名时不起作用,它将其压缩到一个名为.tar.gz的文件中

我试着回显“$1.tar.gz”,输出是“.tar.gz”,所以,我认为它的格式应该非常愚蠢


欢迎提供任何帮助,

使用别名为其创建函数,例如:

 alias targz='function targz_() { tar -cvzf "$1.tar.gz" "$1"; return 0; }; targz_ '

将别名用于函数,例如:

 alias targz='function targz_() { tar -cvzf "$1.tar.gz" "$1"; return 0; }; targz_ '

别名没有位置参数。它们基本上是宏,当执行别名时,别名会被替换为别名的文本

您可以使用以下函数:

targz() {
  tar -cvzf "$1".tar.gz "$1"
}
还是剧本

#!/bin/bash  
tar -cvzf "$1".tar.gz "$1"
就我个人而言,我一直在使用类似于以下脚本的方法来实现类似的目标,并为您的方便添加了注释:

#!/bin/bash
#support multiple args
for arg in "$@" 
do
  #strip ending slash if present (tab-completion adds them)
  arg=${arg%/}
  #compress with pigz (faster on multicore systems)
  tar c "$arg" | pigz - > "$arg".tgz 
done
如果您想要我的完整版本,如果tarring和压缩成功,我也会删除参数目录,就像gzip对单个文件所做的那样

#!/bin/bash
set -o pipefail
for arg in "$@" 
do
  arg=${arg%/}
  tar c "$arg" | pigz - > "$arg".tgz && rm -rf "$arg"
done
更新:
@mklement0更简洁、更有效地去除了结尾斜杠。

别名没有位置参数。它们基本上是宏,当执行别名时,别名会被替换为别名的文本

您可以使用以下函数:

targz() {
  tar -cvzf "$1".tar.gz "$1"
}
还是剧本

#!/bin/bash  
tar -cvzf "$1".tar.gz "$1"
就我个人而言,我一直在使用类似于以下脚本的方法来实现类似的目标,并为您的方便添加了注释:

#!/bin/bash
#support multiple args
for arg in "$@" 
do
  #strip ending slash if present (tab-completion adds them)
  arg=${arg%/}
  #compress with pigz (faster on multicore systems)
  tar c "$arg" | pigz - > "$arg".tgz 
done
如果您想要我的完整版本,如果tarring和压缩成功,我也会删除参数目录,就像gzip对单个文件所做的那样

#!/bin/bash
set -o pipefail
for arg in "$@" 
do
  arg=${arg%/}
  tar c "$arg" | pigz - > "$arg".tgz && rm -rf "$arg"
done
更新:
感谢@mklement0更简洁、更有效地去除结尾斜杠。

试着编写一个脚本来实现这一点,如下所示

echo """

#!/bin/bash if [ -z $1 ]; then
     echo "Variable is Null" 
else
     tar -cvzf $1.tar.gz $1 
fi

""" > /usr/local/bin/targz

chmod +x /usr/local/bin/targz

试着制作一个脚本来实现这一点,就像这样

echo """

#!/bin/bash if [ -z $1 ]; then
     echo "Variable is Null" 
else
     tar -cvzf $1.tar.gz $1 
fi

""" > /usr/local/bin/targz

chmod +x /usr/local/bin/targz

您需要用于此操作或脚本的函数。别名不行。您需要函数或脚本。别名不行。有别名有什么好处?为什么不使用一个名为targz的函数呢?向OP展示有一种方法可以模拟别名中的位置参数似乎有点像学术练习,但是,好的,+1。使用别名的好处是什么?为什么不使用一个名为targz的函数呢?向OP展示有一种方法可以模拟别名中的位置参数似乎有点像学术练习,但是,好的,+1。你说的“别名没有位置参数”是什么意思?我使用位置参数制作了别名,它们工作正常。@Ghost:From:csh中没有在替换文本中使用参数的机制。如果需要参数,则应使用外壳函数。请参阅外壳函数。我目前有一个别名,它接受第一个pos.参数,并将mi ethernet mac地址更改为它,它正在工作。@mklement0谢谢。我已经用你的改进更新了答案。天哪,你说得对。。我所有的$1调用都被忽略,参数被直接传递。。。我真是个天才,我正在修理它们。。非常感谢=“别名没有位置参数”是什么意思?我使用位置参数制作了别名,它们工作正常。@Ghost:From:csh中没有在替换文本中使用参数的机制。如果需要参数,则应使用外壳函数。请参阅外壳函数。我目前有一个别名,它接受第一个pos.参数,并将mi ethernet mac地址更改为它,它正在工作。@mklement0谢谢。我已经用你的改进更新了答案。天哪,你说得对。。我所有的$1调用都被忽略,参数被直接传递。。。我真是个天才,我正在修理它们。。非常感谢=德乔。。。与echo相同,而且,作为一个双引号字符串,它会立即接受某些shell扩展,这在这里是不需要的。使用echo“…”。此外,不要双引号引用$1实例,这意味着脚本将使用嵌入空格的参数中断。echo。。。与echo相同,而且,作为一个双引号字符串,它会立即接受某些shell扩展,这在这里是不需要的。使用echo“…”。此外,不要双引号引用$1实例,这意味着脚本将使用嵌入空格的参数中断。