web-dev-qa-db-ja.com

「スクリプト」をPastebinの可読性に出力します

どうすれば pastescriptコマンド(TypeScript; "man script")から出力され、読みやすくなりますか?

Script started on 2017-10-27 06:20:56-0700
]0;thufir@dur: ~/IdeaProjects[01;32mthufir@dur[00m:[01;34m~/IdeaProjects[00m$ 
]0;thufir@dur: ~/IdeaProjects[01;32mthufir@dur[00m:[01;34m~/IdeaProjects[00m$ tree
[01;34m.[00m
├── kotlin
└── [01;34mkotlinHelloWorld[00m
    ├── kotlinHelloWorld.iml
    ├── [01;34mout[00m
    │   └── [01;34mproduction[00m
    │       └── [01;34mkotlinHelloWorld[00m
    └── [01;34msrc[00m
        └── Main.kt

5 directories, 3 files
]0;thufir@dur: ~/IdeaProjects[01;32mthufir@dur[00m:[01;34m~/IdeaProjects[00m$ 
]0;thufir@dur: ~/IdeaProjects[01;32mthufir@dur[00m:[01;34m~/IdeaProjects[00m$ cat kotlinHelloWorld/src/Main.kt
class Main {



    fun main(args: Array<String>) {
        println("Hello, world!")
    }
}]0;thufir@dur: ~/IdeaProjects[01;32mthufir@dur[00m:[01;34m~/IdeaProjects[00m$ 
]0;thufir@dur: ~/IdeaProjects[01;32mthufir@dur[00m:[01;34m~/IdeaProjects[00m$ exit
exit

Script done on 2017-10-27 06:21:19-0700

ちらつき(?)は、この場合、gnome-terminal色を反映しています。はい、別のシェルや別のコンソールなどを使用することで、その「意味のない」ものを生成しないようにすることができます。問題は、scriptコマンドを適切に取得して記録しないようにするか、Pastebinユーティリティ(または同様のGist-pasteなど)を取得して「適切に」処理する方法です。

まず、回答ありがとうございます。第二に、これによって水が濁らないことを願っています。

thufir@dur:~$ 
thufir@dur:~$ script trying_to_eliminate_control_chars.txt
Script started, file is trying_to_eliminate_control_chars.txt
thufir@dur:~$ 
thufir@dur:~$ echo "hi"
hi
thufir@dur:~$ 
thufir@dur:~$ echo "hi"
hi
thufir@dur:~$ 
thufir@dur:~$ echo "hmm"
hmm
thufir@dur:~$ 
thufir@dur:~$ exit
exit
Script done, file is trying_to_eliminate_control_chars.txt
thufir@dur:~$ 
thufir@dur:~$ cat trying_to_eliminate_control_chars.txt > foo.txt
thufir@dur:~$ 
thufir@dur:~$ cat foo.txt 
Script started on 2017-10-31 17:51:29-0700
thufir@dur:~$ 
thufir@dur:~$ echo "hi"
hi
thufir@dur:~$ 
thufir@dur:~$ echo "hi"
hi
thufir@dur:~$ 
thufir@dur:~$ echo "hmm"
hmm
thufir@dur:~$ 
thufir@dur:~$ exit
exit

Script done on 2017-10-31 17:51:47-0700
thufir@dur:~$ 
thufir@dur:~$ cat trying_to_eliminate_control_chars.txt 
Script started on 2017-10-31 17:51:29-0700
thufir@dur:~$ 
thufir@dur:~$ echo "hi"
hi
thufir@dur:~$ 
thufir@dur:~$ echo "hi"
hi
thufir@dur:~$ 
thufir@dur:~$ echo "hmm"
hmm
thufir@dur:~$ 
thufir@dur:~$ exit
exit

Script done on 2017-10-31 17:51:47-0700
thufir@dur:~$ 
thufir@dur:~$ Pastebin foo.txt 
Pastebin: command not found
thufir@dur:~$ 
thufir@dur:~$ pastebinit foo.txt 
http://paste.ubuntu.com/25862228/
thufir@dur:~$ 

上記 貼り付けnotには制御文字が含まれていると単純に期待できますが、。これは、terminal自体(または私が推測する)がそれらを処理/非表示にしているためです。

プレイ中の非常に低レベルのテキストファイルなど。さらに、端末エミュレーションの仕組みに関する非常に詳細な知識。率直に言って、私を少し超えています。

2
Thufir

コマンドの出力ファイル script を特殊文字から処理およびクリーンアップするために、以下のリファレンス内で提供されるすべてのソリューションをテストしました。

私のUbuntu 16.04では、次のソリューションのみが満足のいく結果を提供します。

Perl -pe 's/\e([^\[\]]|\[.*?[a-zA-Z]|\].*?\a)//g' TypeScript | col -b > TypeScript.new

または、出力をアップロードクライアントプログラムに直接パイプすることができます。

Perl -pe 's/\e([^\[\]]|\[.*?[a-zA-Z]|\].*?\a)//g' TypeScript | col -b | pastebinit

上記のコマンドはpastebinitで機能するため、インストールします。

Sudo apt install pastebinit

参照:


「スクリプトからペーストビンへ」カスタムコマンドを作成する-貼り付け

上記のソリューションに基づいて、カスタムコマンドを作成することをお勧めします。名前を付けましょうspaste

1。spasteという名前の実行可能スクリプトファイルを作成します。これは、シェルコマンドとしてアクセスできるように/usr/local/binにあります。

Sudo touch /usr/local/bin/spaste
Sudo chmod +x /usr/local/bin/spaste
Sudo nano /usr/local/bin/spaste
  • 以下のスクリプトをコピーします。そしてnanoに:貼り付け ShiftIns;セーブ CtrlOEnter;出口 CtrlX
#!/bin/bash
# Name: spaste
# Location: /usr/local/bin
#export LC_ALL=C

# If the first input parameter is option - see: script --help; or type `script --help`
[[ "${1}" =~ -.* ]] && TARGET_FILE="$2" || TARGET_FILE="$1"

# If the variable $TARGET_FILE is empty, use the default output file name
[[ -z "${TARGET_FILE}" ]] && TARGET_FILE="TypeScript"

# The main function - Remove color codes, etc.
script_remove_extras() {
        script "$@"
        Perl -pe 's/\e([^\[\]]|\[.*?[a-zA-Z]|\].*?\a)//g' "$TARGET_FILE" | col -b > "/tmp/$USER-cpaste-$TARGET_FILE.tmp"
        cp "/tmp/$USER-cpaste-$TARGET_FILE.tmp" "$TARGET_FILE"
}

# Upload to 'pastebinit'
upload_pastebinit() { pastebinit < "$TARGET_FILE"; }

# GUI mode with 'chromium' or 'firefox'; CLI mode with 'lynx'; Just upload with 'pastebinit'; Just clear the outputfile
if   [ "$SPASTE_MODE" == "chromium" ]; then
        script_remove_extras "$@"; Nohup chromium-browser "$(upload_pastebinit)" >/dev/null 2>&1 &
Elif [ "$SPASTE_MODE" == "firefox" ]; then
        script_remove_extras "$@"; Nohup firefox "$(upload_pastebinit)" >/dev/null 2>&1 &
Elif [ "$SPASTE_MODE" == "lynx" ]; then
        script_remove_extras "$@"; lynx "$(upload_pastebinit)"
Elif [ "$SPASTE_MODE" == "upload" ]; then
        script_remove_extras "$@"; upload_pastebinit
else
        script_remove_extras "$@"
fi

2。説明:

  • 新しいコマンドspasteを実行すると、コマンドscriptが呼び出され、ユーザーの入力パラメーターが割り当てられます。したがって、呼び出し構文はコマンドscriptと同じです。詳細については、script --helpを参照するか、spaste --helpと入力してください。

    Usage:
     spaste (script) [options] [file]
    
    Make a TypeScript of a terminal session.
    
    Options:
     -a, --append            append the output
     -c, --command <command> run command rather than interactive Shell
     -e, --return            return exit code of the child process
     -f, --flush             run flush after each write
         --force             use output file even when it is a link
     -q, --quiet             be quiet
     -t, --timing[=<file>]   output timing data to stderr (or to FILE)
     -V, --version           output version information and exit
     -h, --help              display this help and exit
    
  • exitと入力してscriptコマンドのセッションを終了すると、spastescriptの出力ファイルを処理して、コマンドpastebinitに出力します。

  • 結果としてpastebinitは、アップロードされたscriptの出力ファイルのコンテンツへのリンクを返します。

  • 新しいコマンドspasteには、pastebinitによって返されるリンクを処理する方法がいくつかあります。これらのモードは、コマンドspasteの実行前に、異なる値を持つ変数$SPASTE_MODEをエクスポートすることで切り替えることができます。

    $ export SPASTE_MODE=
    $ spaste
    
  • 使用可能なモードは次のとおりです。

    • SPASTE_MODE=chromium-返されたリンクをChromiumで開きます。
    • SPASTE_MODE=firefox-返されたリンクをFireFoxで開きます。
    • SPASTE_MODE=lynx-返されたリンクLynx(ターミナルブラウザー)を開きます。
    • SPASTE_MODE=upload-返されたリンクを出力するだけです。
    • SPASTE_MODE=-リンクを返しません。出力ファイルのコンテンツを処理するだけです。
  • ~/.bashrcファイルからお気に入りのモードをエクスポートできます。たとえば、次の行を下部に追加します。

    export SPASTE_MODE=firefox
    

3。使用法のデモンストレーション:

enter image description here

2
pa4080

これはあなたが探している答えではないと思いますが、うまくいきます:

scriptを実行し、TypeScriptファイルを作成したら、cat TypeScriptを実行します。すべてのエスケープシーケンスは端末によって消費されるため、出力は色付きのプレーンテキストです。 (マウスを使用して)手動でコピーすると、プレーンテキストとしてクリップボードに保存されます。必要な場所に貼り付けます。

1
wjandrea