【问题标题】:Printing command line argument into new Linux tex file将命令行参数打印到新的 Linux tex 文件中
【发布时间】:2020-03-04 14:49:50
【问题描述】:

第一次问堆栈溢出问题。我是一名学生,正在开发一个小型 Linux 待办事项列表应用程序,用户可以使用如下命令创建新文件:

./todo add "hello world"

...结果应该是待办事项列表中的一个新文本文件,其中包含文本“hello world”(或“”中的任何内容)。

目前为止:我的 bash 脚本 add.sh 创建了一个新文件,将其添加到待办事项列表并重命名该列表中的所有项目以创建一个编号列表,如下所示:

1.txt 2.txt 3.txt

这是我的 add.sh 代码:

echo $2 >> newFile.txt. #creates a new file
mv newFile.txt ~/todoApp/usrMenu/todo #moves file to todo list
cd ~/todoApp/usrMenu/add && ./name.sh #renumbers all files in the todo list

但这是我的问题: 如何让命令行中的 $2 参数(“hello world”)成为我的新文件中的文本?

现在,当我 cat 新文件时,它是空白的。我想要的是让新文件读取“hello world”。

提前致谢!

【问题讨论】:

  • ./todoadd.sh 有什么关系?
  • ./todo 是一个 bash 脚本,您可以使用它来调用目录 ~/todoApp 中的任何其他函数/脚本。
  • 你能发帖./todo吗?听起来问题出在那个脚本而不是add.sh
  • 好的,谢谢!我的那部分代码真的很基础。它只是一个 if-else 树,if [ $1 == "add" ] then ./usrMenu/add/add.sh #calls add.sh 和树的其余部分调用其他 bash 脚本。
  • 只需将参数传递给脚本:./usrMenu/add/add.sh "$2"

标签: linux bash shell unix command-line


【解决方案1】:

问题出在您的./todo 脚本中:

if [ $1 == "add" ]
then
  ./usrMenu/add/add.sh #calls add.sh
fi

您没有将参数从./todo 传递到add.sh,因此add.sh 中的$2 将为空并且与todo 中的$2 不同。传递所有参数,可以使用"$@"

if [ "$1" == "add" ]
then
  ./usrMenu/add/add.sh "$@" #calls add.sh and forwards all parameters
fi

或者,只传递您关心的参数,然后在脚本中变为"$1" (NOT "$2"):

./usrMenu/add/add.sh "$2" # Let "$2" in this script become "$1" in add.sh

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-08
    • 1970-01-01
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    相关资源
    最近更新 更多