我想評估一個通過stdin傳遞給腳本的文件名,然後在sed命令中使用它。目前,我有以下代碼:如何評估通過stdin傳遞給bash腳本的文件名
#!/bin/bash
eval file="${1:-/dev/stdin}"
echo "$file"
sed -i -r ':a; s%(.*)/\*.*\*/%\1%; ta; /\/\*/ !b; N; ba' "$file"
調用此爲:
bash callfile < file.txt
導致以下錯誤:
/dev/stdin
sed: couldn't open temporary file /dev/sedSVVTdr: Permission denied
這是爲什麼代碼無法讀取的文件名我傳遞給它?
看起來像是要'sed'在'/ dev/stdin'中進行就地替換。它會在哪裏寫結果? – Biffen
您將'file'設置爲實際的字符串'/ dev/stdin' Sed無法知道您的意思是從標準輸入讀取。 –
這正是問題所在。如何在未明確設置腳本的情況下將eval'file =「$ {1: -/dev/stdin}」設置爲「file.txt」而不是「/ dev/stdin」? – 218