Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.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
Linux 将输出重定向到文件外壳脚本_Linux_Bash_Shell_Ubuntu - Fatal编程技术网

Linux 将输出重定向到文件外壳脚本

Linux 将输出重定向到文件外壳脚本,linux,bash,shell,ubuntu,Linux,Bash,Shell,Ubuntu,我正在尝试创建一个脚本,该脚本将从用户(名称和用户名)获取一个输入,然后将该输入定向到一个以该用户名命名的文本文件。下面的代码将创建该文件,但不会将任何数据导入该文件。 有人能帮我解决这个问题吗?谢谢 echo "What is your name?" read name echo "What is your chosen username?" read username cd user_records $name >> "$username".txt $username >&

我正在尝试创建一个脚本,该脚本将从用户(名称和用户名)获取一个输入,然后将该输入定向到一个以该用户名命名的文本文件。下面的代码将创建该文件,但不会将任何数据导入该文件。 有人能帮我解决这个问题吗?谢谢

echo "What is your name?"
read name
echo "What is your chosen username?"
read username
cd user_records
$name >> "$username".txt
$username >> "$username".txt

Lohmar给出了答案,但您需要响应变量。您的代码试图执行$name和$username,但您需要将其用作数据,而不是命令

echo -n "What is your name? "
read name
echo -n "What is your chosen username? "
read username
cd user_records
echo "$name" >> "$username".txt
echo "$username" >> "$username".txt
几点意见:

  • 您可以使用
    -p
    参数进行读取
  • 此外,除非您知道为什么不需要,否则请始终使用
    -r
  • 您应该检查
    cd
    是否成功-如果失败怎么办
  • 总是引用你的变量
或者您不需要
cd
,在这种情况下,您可以编写

err(){ echo "$@" >&2; return 1; }

udir="./user_records"

read -r -p  'What is your name?> ' name
read -r -p  'What is your chosen username?> ' username
[[ -d "$udir" ]] || err "The $udir doesn't exists" || exit 1
printf "%s\n%s\n" "$name" "$username" >> "$udir/$username.txt"

添加
echo
<代码>回显$name>>干杯,我来试试!是的,我有很多其他的东西,但是删除了它——这让我觉得对所要求的东西太过分了。顺便说一句,我的标准cd错误检查是
cd dir |{echo“error”>&2;exit 40;}
string two | |不需要。另外,您可以执行
read-rp“这是我的提示:
并节省一些空间:-)@jm666您没有领会我的意思。实际上,我有一个函数库,它有一个log()和err(),也在字符串前面加上日期/时间字符串。我的观点是,您正在执行两个或多个命令,而不是将错误消息包装在大括号中退出。
err(){ echo "$@" >&2; return 1; }

udir="./user_records"

read -r -p  'What is your name?> ' name
read -r -p  'What is your chosen username?> ' username
[[ -d "$udir" ]] || err "The $udir doesn't exists" || exit 1
printf "%s\n%s\n" "$name" "$username" >> "$udir/$username.txt"